2009-04-16 3 views
2

ASP.NET MVC에서 사용자 지정 경로 처리기를 만드는 방법은 무엇입니까?ASP.NET MVC, URL 구조 조작

+0

너 성취하려고? 당신은 조금 더 구체적이어야합니다 –

+0

안녕하세요 앤드류, 제 질문을 다시 써 봤는데 좀 더 구체적 이길 바랍니다. 의견에 환호합니다. 제이미 –

답변

6

ASP.NET MVC는 쉽게 Global.asax.cs에서 사용자 지정 경로 처리기를 만들 수 있습니다 : 모든 요청에 ​​

routes.MapRoute(
     "Default", 
     "{controller}.aspx/{action}/{id}", 
     new { action = "Index", id = "" } 
    ).RouteHandler = new SubDomainMvcRouteHandler(); 

이됩니다 지정 사용자 정의 RouteHandler에 의해 처리된다. 이 특정 핸들러의 경우 :

그런 다음 당신은 SubDomainMvcHandler는 URL에서 하위 도메인을 잡고 속성으로 컨트롤러를 통과,이 경우, 원하는대로 할 수
public class SubDomainMvcRouteHandler : MvcRouteHandler 
    { 
     protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext) 
     { 
      return new SubDomainMvcHandler(requestContext); 
     } 
    } 

: 무엇

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

완벽. Jason 고맙다! 관심 분야에서 SO에 대한 해결책을 고맙게 생각하는 일반적인 방법은 무엇입니까? 댓글이나 다른 방법? –

+0

나는 '감사합니다'가 이것과 같은 동료 평가를받은 커뮤니티에서 충분하다고 생각합니다 .-) – Jason

+0

컨트롤러 메소드의 속성으로 올 것입니까? –