2009-04-16 21 views
2

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

+0

何ですかあなたは達成しようとしていますか?あなたはもう少し具体的にする必要があります –

+0

こんにちはAndrew、私は私の質問を書き直しました。コメントに感謝します。 Jamie –

答えて

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); 
     } 
    } 
+0

パーフェクト。ありがとうジェイソン!興味のないところで、SOの解決に感謝する一般的な方法は何ですか?コメントや他の方法ですか? –

+0

私は、このようなピアレビューコミュニティで「感謝」は十分だと思っています;-) – Jason

+0

これはコントローラメソッドのプロパティとして来るでしょうか? –