2

ASP.NET MVCでカスタムルートハンドラーを作成するにはどうすればよいですか?

4

1 に答える 1

6

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);
        }
    }
于 2009-04-16T14:12:22.787 に答える