2014-07-22 105 views
0

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

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

但是,这个处理程序唯一一次被调用的时候,我的路径深度为三,适用于请求的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 } 
      ); 

即使配置了此路线,是否还有办法让它工作?

回答

1

它看起来像路由干扰处理程序。为了让处理程序收到我需要调用IgnoreRoute方法针对当前RouteCollection忽略与任何。测试在路线他们的要求:

的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 } 
      ); 
     } 
    } 

它现在里面。有一个更好的方法吗?

0

我相信你的HTTP处理程序不被调用的原因是因为你在web应用程序注册为IIS 6,对于IIS 7及以上的,像这样做:

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

我不认为这就是它。本教程显示了它的工作原理http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx – cgatian

+0

请查看以下MSDN更新文档:http://msdn.microsoft.com/en-us/library/vstudio/46c5ddfy(v=vs .100).aspx – EduardoFernandes

+0

是的,它说II6。我正在运行II8。为了补充,我也试过这个,IIS抱怨有无效的设置。 – cgatian