【问题标题】:ASP .NET MVC - Change domain used by URL.Action?ASP .NET MVC - 更改 URL.Action 使用的域?
【发布时间】:2011-10-07 10:03:43
【问题描述】:

我的网站有两个指向相同内容的域。我们称它们为 www.domainA.com 和 www.domainB.com,其中 www.domainA.com/Page 与 www.domainB.com/Page 相同。

网站上的每个页面都有许多通用导航链接(和其他链接),这些链接是使用 Url.Action 和 Html.ActionLink 调用的混合构造而成的。生成的 url 基于当前域。因为 www.domainA.com 是主域,所以我希望从 www.domainB.com 生成的任何链接都基于 www.domainA.com。

这可以集中完成,而不是我在整个网站上进行硬编码吗?

谢谢, 艾伦

【问题讨论】:

    标签: asp.net-mvc url seo action actionlink


    【解决方案1】:

    我最终使用解决方案 here 来指示 IIS 将请求重写到我的旧域。

    希望这可以帮助其他有相同要求的人。

    艾伦

    【讨论】:

      【解决方案2】:

      您可以通过使用继承自 System.Web.Routing.Route 的自定义路由对象来解决此问题。

      例如:

      public class MultipleDomainRoute : System.Web.Routing.Route
      {
          // ...
      
          public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
          {
              VirtualPathData path = base.GetVirtualPath(requestContext, values);
      
              if (requestContext.Url.Host == "domain2.com") {
                   path.VirtualPath = "http://domain1.com" + path.VirtualPath;
              }
      
              return path;
          }
      }
      

      然后在您注册路线的 global.asax 中使用:

      routes.Add(new MultipleDomainRoute(/* args */));
      

      【讨论】:

      • 谢谢 Jan。这看起来像我需要的。但是,我需要实现一个构造函数。最小构造函数采用 url 模式和一个 IRouteHandler 实例。我需要自己实现一个 IRouteHandler 吗?
      • 您可以将构造函数重定向回基类。在此处查看示例:coderjournal.com/2008/03/force-mvc-route-url-lowercase.
      猜你喜欢
      • 1970-01-01
      • 2017-06-12
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多