如何强制将单个域用于ASP.NET MVC站点?

Ala*_*ark 1 .net c# asp.net asp.net-mvc asp.net-mvc-routing

我目前有一个ASP .NET MVC站点,有两个指向它的域(例如www.domainA.com和www.domainB.com).即使访问www.domainB.com,我也想更改所有链接以使用www.domainA.com.

我的所有网址都是由内置的Url.Action和Html.ActionLink方法生成的.

我按照上一个问题中的说明进行操作,但我无法完成它.

这是我的自定义路线:

public class MultipleDomainRoute : System.Web.Routing.Route
{
    public MultipleDomainRoute(string url, IRouteHandler routeHandler)
        : base(url, routeHandler)
    {
    }

    public override VirtualPathData GetVirtualPath(RequestContext requestContext, RouteValueDictionary values)
    {
        VirtualPathData path = new VirtualPathData(this, "http://www.domainA.com/" + values["controller"] + "/" + values["action"]);
        return path;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的自定义路由处理程序:

class MyRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new MvcHandler(requestContext);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的RegisterRoutes方法:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Add(new MultipleDomainRoute("{controller}/{action}/{id}", new MyRouteHandler()));

    routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );
}
Run Code Online (Sandbox Code Playgroud)

路由正在运行(即没有崩溃我的网站)但是当我运行它时,我的网址只是附加到http:// localhost ...例如,我得到" http:// localhost:56822/http:/ www. domainA.com/Home/Index ".

有谁知道为什么这不起作用?

Nic*_*ick 5

如果您使用的是IIS 7,最好在Web服务器级别实现此功能.

这样,正确的状态代码将返回到HTTP标头中的浏览器,并且您的MVC应用程序可以处理自己的路由,而不必担心在大多数情况下是Web服务器工作的域和主机名.

有两种方法可以实现这一目标

1.通过IIS管理控制台

在IIS控制台中打开您的网站,然后选择URL Rewrite并按照以下步骤操作:

  1. 创建新规则并将匹配URL设置为通配符,并将模式作为辅助域输入
  2. 添加{HTTP_HOST}等于站点的辅助域的条件.
  3. 将"操作类型"设置为重定向,然后输入要重定向到的模式.在这种情况下,"http://mysite.com {R:1}"会将IP地址之后的所有内容映射到其域名,因此mysite.net/mycontent会重定向到mysite.com/mycontent

2.在您的web.config中

<system.webServer>
<rewrite>
 <rules>
 <rule name="Redirect to mydomain.com" stopProcessing="true">
 <match url=".*"/>
 <conditions>
 <add input="{HTTP_HOST}" pattern="^(www.)?mydomain.net"/>
 </conditions>
 <action type="Redirect" url="http://www.mydomain.com/{R:0}"/>
 </rule>
 </rules>
 </rewrite>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

此方法将确保您的子目录已映射,并且您的站点保持搜索引擎友好,并生成正确的响应代码.