ASP.NET MVC, Управление структурой URL - PullRequest
2 голосов
/ 16 апреля 2009

Как мне создать собственный обработчик маршрута в ASP.NET MVC?

1 Ответ

6 голосов
/ 16 апреля 2009

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);
        }
    }
...