2011-10-03 268 views
0

在Asp.Net MVC 3上,我覆蓋了MvcRouteHandler和MvcHandler以包含處理Url的子域部分。asp.net MvcHandler.ProcessRequest永遠不會被調用

然而,它似乎從來沒有調用MvcHandler的ProcessRequest方法。

public class SubDomainMvcRouteHandler : MvcRouteHandler 
{ 
    protected override IHttpHandler GetHttpHandler(System.Web.Routing.RequestContext requestContext) 
    { 
     return new SubDomainMvcHandler(requestContext); 
    } 
} 

public class SubDomainMvcHandler : MvcHandler 
{ 
    public SubDomainMvcHandler(RequestContext context) 
     : base(context) 
    { 
    } 

    protected override void ProcessRequest(HttpContextBase httpContext) 
    { 
     string[] hostNameParts = httpContext.Request.Url.Host.Split('.'); 

     int length = hostNameParts.Length - 3; 

     for (int i = length; i >= 0; i--) 
     { 
      if (hostNameParts[i] != "www") 
       RequestContext.RouteData.Values.Add("SubDomain" + (length - i + 1), hostNameParts[0]); 
     } 

     base.ProcessRequest(httpContext); 
    } 
} 

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ).RouteHandler = new SubDomainMvcRouteHandler(); 

    } 

回答

1

您應該重寫BeginProcessRequest,它具有以下特徵:

protected override IAsyncResult BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, object state) 
+0

有什麼理由將被調用,而不是的ProcessRequest你知道關?我想知道底下發生了什麼。 –

+0

'BeginProcessRequest'是路由處理和完成的地方,ControllerFactory被實例化,並且Controller被實例化。 BeginProcessRequest完成時,您想完成的所有事情都已完成。 – counsellorben

相關問題