HTTP处理程序未被调用

时间:2014-07-22 00:28:57

标签: asp.net asp.net-mvc httphandler ihttphandler

我有一个正确实现IHttpHandler的自定义HTTP处理程序。以下是我在webConfig中配置的内容。如果我理解正确,这个块应该捕获任何带有.test作为扩展名的请求。

<handlers> 
    <add name="SampleHandler" verb="*" path="*.test" 
     type="TestApp.App_Start.CustomHandler, TestApp" />
</handlers>

但是,唯一一次调用此处理程序的时候是我将路径深度为3应用于请求URL。所有其他请求将为404。

例如,当路径为:

时,处理程序正常工作
localhost:XXX\some\fake\path\file.test

但不是为了:

localhost:XXX\some\file.test

我正在使用ASP.NET MVC 5,并怀疑它与路由有关。我也在使用VS2013中提供的示例项目,所以除了添加到项目中的处理程序之外,我还没有做其他任何事情。

更新

我已确定默认路线正在干扰。

  routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );

即使配置了这条路线,还有办法让它工作吗?

2 个答案:

答案 0 :(得分:1)

看起来路由正在干扰处理程序。为了允许处理程序接收请求,我需要针对当前RouteCollection调用IgnoreRoute方法,忽略其中包含.test的任何路由:

在RouteConfig类中

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

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }

现在有效。有更好的方法吗?

答案 1 :(得分:0)

我认为没有调用HTTP Handler的原因是因为您在IIS 6的Web应用程序中注册。对于IIS 7及更高版本,请执行以下操作:

<configuration>
  <system.web>
    <httpHandlers>
      <add verb="*" path="SampleHandler" 
        type="TestApp.App_Start.CustomHandler, TestApp" />
    </httpHandlers>
  </system.web>
</configuration>