what tag net mvc asp asp.net-mvc web-config isapi

asp.net-mvc - tag - viewbag.title in mvc



¿Qué hace ExtensionlessUrlHandler en una aplicación MVC? (2)

Debe comprobar su archivo web.config. Si el siguiente ajuste está presente

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

Entonces, podría explicar por qué todo sigue funcionando después de eliminar los controladores ExtensionlessUrlHandler.

De forma predeterminada, el runAllManagedModulesForAllRequests es falso, lo que significa que IIS no delega cada solicitud a los módulos administrados (.NET). El módulo central que sabe cómo manejar la extensión menos la URL se llama módulo UrlRouting y es un módulo administrado (no nativo). Esto significa que no tiene la oportunidad de manejar la solicitud e IIS internamente trata de manejarlo de acuerdo con la configuración de mapeo del controlador. Por cierto, la configuración predeterminada trata la url sin extensión como un recurso estático y, por lo tanto, falla con el código de estado 403.14 (en la mayoría de los casos)

Cuando runAllManagedModulesForAllRequests es verdadero, cualquier solicitud que se envíe a IIS se dirige a cualquier módulo administrado. El módulo UrlRouting tiene un cambio para procesar la solicitud y delegarla en ASP.NET MVC.

Para resumir, cuando ejecute aplicaciones MVC de ASP.NET, tiene dos opciones

  1. runAllManagedModulesForAllRequests es falso. El ExtensionlessUrlHandler debe estar registrado
  2. runAllManagedModulesForAllRequests es verdadero. Puede eliminar ExtensionlessUrlHandler de la lista de controladores de IIS

Estoy tratando de agilizar mi aplicación MVC y eliminar tanto como sea posible . Alguien me puede explicar qué hace este código a continuación en el archivo web.config en la raíz de la aplicación. Lo he comentado y todavía pude ejecutar la aplicación ...

<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> ...

He analizado esta pregunta: ASP.NET MVC 4 y ExtensionlessUrlHandler, que tiene una respuesta que enlaza con este blog: http://blogs.msdn.com/b/tmarq/archive/2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4.aspx pero no lo encuentro para explicar mi pregunta.

Estoy usando: IIS 8, ASP.NET MVC 4, .NET 4.5 tanto en desarrollo como en producción


IIS Express usa diferentes nombres de manejadores que IIS

Agregue el siguiente marcado y debería deshabilitar los controladores sin extensión para IIS Express únicamente

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