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 ".
有谁知道为什么这不起作用?
如果您使用的是IIS 7,最好在Web服务器级别实现此功能.
这样,正确的状态代码将返回到HTTP标头中的浏览器,并且您的MVC应用程序可以处理自己的路由,而不必担心在大多数情况下是Web服务器工作的域和主机名.
有两种方法可以实现这一目标
1.通过IIS管理控制台
在IIS控制台中打开您的网站,然后选择URL Rewrite并按照以下步骤操作:
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)
此方法将确保您的子目录已映射,并且您的站点保持搜索引擎友好,并生成正确的响应代码.