web-dev-qa-db-fra.com

Pourquoi puis-je supprimer ExtensionlessUrlHandler d'une application MVC sans aucun effet néfaste?

J'essaie de rationaliser mon application MVC et de supprimer autant que possible . Quelqu'un peut-il m'expliquer ce que fait ce code ci-dessous dans le fichier web.config à la racine de l'application. Je l'ai commenté et j'ai quand même réussi à exécuter l'application ...

<system.webServer>

  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit"/>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0"/>
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0"/>
    </handlers>
    ...

J'ai regardé cette question: ASP.NET MVC 4 et ExtensionlessUrlHandler qui a une réponse qui renvoie à ce blog: http://blogs.msdn.com/b/tmarq/archive /2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4.aspx mais je ne le trouve pas pour expliquer ma question.

J'utilise: IIS 8, ASP.NET MVC 4, .NET 4.5 en développement et en production

22
Giorgio

IIS express utilise des noms de gestionnaires différents de ceux d'IIS

Ajoutez le balisage suivant et cela devrait désactiver les gestionnaires sans extension pour IIS express seulement

<remove name="ExtensionlessUrl-ISAPI-4.0_32bit" />
<remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
<remove name="ExtensionlessUrl-Integrated-4.0" />
10
Ori Calvo

Vous devez vérifier votre fichier web.config. Si le paramètre suivant est présent

<system.webServer>
  <modules runAllManagedModulesForAllRequests="true">
  </modules>    
</system.webServer>

Ensuite, cela pourrait expliquer pourquoi tout fonctionne toujours après la suppression des gestionnaires ExtensionlessUrlHandler.

Par défaut, runAllManagedModulesForAllRequests est faux, ce qui signifie que IIS ne délègue pas chaque demande aux modules gérés (.NET). Le module principal qui sait comment gérer l'extension sans URL est nommé module UrlRouting et il s'agit d'un module géré (non natif). Cela signifie qu'il n'a pas la possibilité de gérer la demande et IIS essaie en interne de le gérer en fonction de son mappage de gestionnaire BTW, la configuration par défaut traite l'URL sans extension comme une ressource statique et échoue donc avec le code d'état 403.14 (dans la plupart des cas)

Lorsque runAllManagedModulesForAllRequests est vrai, toute demande envoyée à IIS est dirigée vers n'importe quel module géré. Le module UrlRouting a une modification pour traiter la demande et la déléguer à ASP.NET MVC.

Pour résumer, lors de l'exécution d'applications ASP.NET MVC, vous avez deux options

  1. runAllManagedModulesForAllRequests est false. Le ExtensionlessUrlHandler doit être enregistré
  2. runAllManagedModulesForAllRequests est vrai. Vous pouvez supprimer ExtensionlessUrlHandler de la liste des gestionnaires IIS
21
Ori Calvo