2016-04-19 6 views
1

Я написал веб-приложение ASP.Net с настраиваемым обработчиком HTTP. Тем не менее, после импорта приложения в IIS 7.5, IIS возвращает это, когда приложение запускается:Как отключить или удалить DirectoryListingModule в IIS, чтобы предотвратить ошибку HTTP 405

HTTP/1.1 405 Method Not Allowed 

Когда я включаю Failed Request Tracing правил имеют улавливать HTTP 405 ошибок я вижу это:

enter image description here

Мой обработчик не вызывается. Поэтому я хотел бы удалить DirectoryListingModule. Но, подобно @Brendan Hill here, ничего, что я пробовал, похоже, отключает модуль. Даже закомментировать все строки, в которых упоминается этот модуль в C: \ Windows \ System32 \ Inetsrv \ Config \ applicationHost.config не работает:

<!--add name="DirectoryListingModule" image="%windir%\System32\inetsrv\dirlist.dll" /--> 
<!--add name="DirectoryListingModule" lockItem="true" /--> 
<!--add name="StaticFile" path="*" verb="*" modules="StaticFileModule,DefaultDocumentModule,DirectoryListingModule" resourceType="Either" requireAccess="Read" /--> 

Как @Brendan Hill Я предпочел бы решение в Интернете моего приложения .config, поэтому мне не нужно возиться с настройками IIS. Отрывок из моей текущей Web.config:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <handlers> 
     <remove name="WebDAV" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="AuthServiceHandler" 
      path="*." 
      verb="*" 
      type="AuthServiceHTTPHandler.App_Code.AuthServiceHandler" 
      preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 

Если я импортировать мое приложение в Default Web Site в IIS и привязать его к 9000, я могу вызвать приложение с запросом POST к http://localhost:9000. Этот URL-адрес прекрасен; Я не пытаюсь запрашивать какие-либо веб-страницы.

ответ

1

В конце концов, я работал вокруг проблемы путем создания фиктивного веб-страницы и привязки обработчика к тому, что для глагола POST я был заинтересован в:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true"/> 
    <handlers> 
     <remove name="WebDAV" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="AuthServiceHandler" 
      path="dummy.html" 
      verb="POST" 
      type="AuthServiceHTTPHandler.App_Code.AuthServiceHandler" 
      preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 

Обработчик затем срабатывать для звонков http://localhost:9000/Auth/dummy.html , где Auth было именем моего приложения, когда оно было развернуто на веб-сайте по умолчанию в IIS. (Я не оценил, что мне нужен контекст, когда я разместил вопрос выше). Таким образом, DirectoryListingModule был эффективно обойден.

Удобно, привязывая обработчик к глаголу POST, вы можете использовать ту же «фиктивную» веб-страницу, чтобы предоставлять полезную информацию для пользователей, если они просматривают ее в веб-браузере (поскольку браузер отправляет запрос GET, который выиграл не перехватывается обработчиком).

Нет параметров IIS, которые необходимо изменить. Это работало для меня с использованием IIS 7.5 в Windows 7.