Что делает ExtensionlessUrlHandler в приложении MVC?

Я пытаюсь оптимизировать свое приложение MVC и удаление как можно больше. Может кто-нибудь объяснить мне, что этот код ниже делает в интернете.файл config в корневом каталоге приложения. Я прокомментировал это и все еще сумел запустить приложение...

<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.NETFrameworkv4.0.30319aspnet_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.NETFramework64v4.0.30319aspnet_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>
    ...

Я посмотрел на этот вопрос:ASP.NET MVC 4 и ExtensionlessUrlHandler который имеет ответ, который ссылается на этот блог: http://blogs.msdn.com/b/tmarq/archive/2010/05/26/how-extensionless-urls-are-handled-by-asp-net-v4.aspx но я не нахожу его, чтобы объяснить свой вопрос.

Я использую: IIS 8, ASP.NET MVC 4, .NET 4.5 как в разработке, так и в производстве

2 ответов


IIS express использует разные имена обработчиков, чем IIS

добавьте следующую разметку, и она должна отключить обработчики без расширения для IIS express только

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

вы должны проверить свою сеть.конфигурационный файл. Если присутствует следующий параметр

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

тогда это может объяснить, почему все еще работает после удаления обработчиков ExtensionlessUrlHandler.

по умолчанию runAllManagedModulesForAllRequests имеет значение false, что означает, что IIS не делегирует каждый запрос управляемым модулям (.NET). Основной модуль, который знает, как обрабатывать расширение меньше URL, называется модулем UrlRouting, и это управляемый (не родной) модуль. Это означает, что у него нет возможности обработать запрос, и IIS внутренне пытается обработать его в соответствии с конфигурацией сопоставления обработчиков. Кстати, конфигурация по умолчанию рассматривает URL-адрес без расширения как статический ресурс и поэтому терпит неудачу с кодом состояния 403.14 (в большинстве случаев)

, когда runAllManagedModulesForAllRequests true любой запрос, отправляемый в IIS, направляется в любой управляемый модуль. Модуль UrlRouting имеет изменение для обработки запроса и делегирования его ASP.NET MVC.

подводя итог, при запуске ASP.NET приложения MVC у вас есть два варианта

  1. runAllManagedModulesForAllRequests равно false. ExtensionlessUrlHandler должен быть зарегистрирован
  2. runAllManagedModulesForAllRequests истинно. Можно удалить ExtensionlessUrlHandler из списка обработчиков IIS