【问题标题】:asp.net MvcHandler.ProcessRequest is never calledasp.net MvcHandler.ProcessRequest 永远不会被调用
【发布时间】:2011-10-03 15:43:16
【问题描述】:

在 Asp.Net MVC 3 上,我覆盖了 MvcRouteHandler 和 MvcHandler 以包括处理 Url 的子域部分。

但它似乎从未调用过 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();

    }

【问题讨论】:

    标签: asp.net-mvc-3 subdomain asp.net-mvc-routing httprequest


    【解决方案1】:

    您应该覆盖BeginProcessRequest,它具有以下签名:

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

    【讨论】:

    • 有什么理由会调用它而不是你知道的 ProcessRequest 吗?我确实想了解下面发生的事情。
    • BeginProcessRequest是路由处理完成的地方,ControllerFactory被实例化,Controller被实例化。 BeginProcessRequest 完成时,您想要完成的所有事情都已完成。
    猜你喜欢
    • 2012-10-27
    • 2013-10-12
    • 2012-03-27
    • 2013-08-29
    • 2013-11-03
    • 1970-01-01
    • 1970-01-01
    • 2015-05-06
    • 2015-10-15
    相关资源
    最近更新 更多