2014-07-22 3 views
0

J'ai un gestionnaire HTTP personnalisé qui implémente IHttpHandler. Voici ce que j'ai configuré dans mon webConfig. Si je comprends bien, ce bloc devrait capturer toutes les demandes avec .test comme extension.Le gestionnaire HTTP n'est pas appelé

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

Cependant, la seule fois ce gestionnaire est toujours invoqué est quand j'ai une profondeur de chemin de trois appliqué à l'URL de la requête. Toutes les autres demandes seront 404.

Par exemple, le gestionnaire fonctionne correctement lorsque le chemin est:

localhost:XXX\some\fake\path\file.test 

Mais pas pour:

localhost:XXX\some\file.test 

J'utilise ASP.NET MVC 5 et suspect cela a quelque chose à voir avec le routage. J'utilise aussi l'exemple de projet fourni dans VS2013, donc en plus d'un gestionnaire ajouté au projet, je n'ai vraiment rien fait d'autre.

Mise à jour:

J'ai déterminé la route par défaut est interférait.

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

Y a-t-il moyen de le faire fonctionner même si cette route est configurée?

Répondre

1

Il semble que le routage interférait avec le gestionnaire. Afin de permettre au gestionnaire de recevoir la demande que je devais appeler la méthode IgnoreRoute contre le courant RouteCollection ignorant les routes avec .test en eux:

intérieur de la classe 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 } 
      ); 
     } 
    } 

Il fonctionne maintenant. Y a-t-il une meilleure manière de faire cela?

0

Je crois que la raison pour vous HTTP Handler pas appelé parce que vous enregistrez dans les applications Web pour IIS 6. Pour IIS 7 et au-dessus, le faire comme ceci:

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

Je ne pense pas que thats it. Ce tutoriel montre comment cela fonctionne http://www.hanselman.com/blog/BackToBasicsDynamicImageGenerationASPNETControllersRoutingIHttpHandlersAndRunAllManagedModulesForAllRequests.aspx – cgatian

+0

Consultez cette documentation de mise à jour MSDN: http://msdn.microsoft.com/fr-fr/library/vstudio/46c5ddfy(v=vs .100) .aspx – EduardoFernandes

+0

Oui, il est dit II6. Je cours II8. Pour ajouter, j'ai également essayé cela et IIS se sont plaints qu'il y avait des paramètres invalides. – cgatian

Questions connexes