【发布时间】:2010-10-19 19:51:01
【问题描述】:
如何在 ASP.NET MVC 中创建自定义路由处理程序?
【问题讨论】:
-
你想达到什么目的?你需要更具体一点
-
嗨,安德鲁,我已经重新编写了我的问题,希望更具体。为评论喝彩。杰米
标签: asp.net-mvc url-rewriting friendly-url
如何在 ASP.NET MVC 中创建自定义路由处理程序?
【问题讨论】:
标签: asp.net-mvc url-rewriting friendly-url
ASP.NET MVC 可以轻松地在 Global.asax.cs 中创建自定义路由处理程序:
routes.MapRoute(
"Default",
"{controller}.aspx/{action}/{id}",
new { action = "Index", id = "" }
).RouteHandler = new SubDomainMvcRouteHandler();
这将导致所有请求都由指定的自定义 RouteHandler 处理。对于这个特定的处理程序:
public class SubDomainMvcRouteHandler : MvcRouteHandler
{
protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext)
{
return new SubDomainMvcHandler(requestContext);
}
}
然后你可以做任何你想做的事情,在这种情况下,SubDomainMvcHandler 从 URL 中获取子域并将其作为属性传递给控制器:
public class SubDomainMvcHandler : MvcHandler
{
public SubDomainMvcHandler(RequestContext requestContext) : base(requestContext)
{
}
protected override void ProcessRequest(HttpContextBase httpContext)
{
// Identify the subdomain and add it to the route data as the account name
string[] hostNameParts = httpContext.Request.Url.Host.Split('.');
if (hostNameParts.Length == 3 && hostNameParts[0] != "www")
{
RequestContext.RouteData.Values.Add("accountName", hostNameParts[0]);
}
base.ProcessRequest(httpContext);
}
}
【讨论】: