2014-07-22 165 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