2015-10-22 2 views
1

Я в процессе написания IHttpHandler. Моя среда - Windows 7 Enterprise, IIS 7 (появляется). Мой обработчик работает как приложение в пуле приложений по умолчанию, который работает в интегрированном режиме. МетодНе удается установить на мой IHttpHandler, GET отлично работает

В настоящее время моего обработчика ProcessRequest() делает только следующее (только тестирование на данный момент):

public void ProcessRequest(HttpContext context) 
{ 
    context.Response.StatusCode = 200; 
    context.Response.ContentType = "text/html"; 
    context.Response.Output.Write("file uploaded."); 
} 

добавить свой обработчик через web.config следующим образом:

<configuration> 
    <system.webServer> 
     <handlers> 
      <add name="HttpUpload" path="*" verb="*" type="HttpUpload, HttpUpload" resourceType="Unspecified"/> 
     </handlers> 
    </system.webServer> 
</configuration> 

I Я использую curl для проверки моего обработчика. Когда я делаю следующее:

curl http://localhost/httpupload/foo 

Это работает. Однако, когда я пытаюсь сделать PUT следующим образом:

curl --upload-file build.txt http://localhost/httpupload/foo 

Это терпит неудачу с 405 Method Not Allowed, ошибка. Я обыскал, а другие в stackoverflow указали, что необходимо удалить WebDAVModule. Я удалил это, и он разрешил ошибку 405. Однако теперь я получаю ошибку 500.21. Из отслеживания неудавшегося запроса говорится, что модуль IIS Web Core генерирует ошибку 500.21, потому что «Данные недействительны». (8007000D). Вопрос, кажется, похож на этот пост:

IIS 7, HttpHandler and HTTP Error 500.21

Но то, что казалось, чтобы исправить это для других, например, при запущенном aspnet_regiis -i, не имел никакого влияния на меня. Я отлаживал мой обработчик, и он ломает метод ProcessRequest() моего обработчика при использовании GET, но при использовании PUT он не прерывается, поэтому я знаю, что он даже не вызван. По какой-то причине этот другой основной модуль не выполняет вызов.

EDIT:

Я выполнил завиток команду против того же URL, который делает POST и работал. Таким образом, GET и POST работают против моего обработчика HTTP, PUT этого не делает. Я также выполнил ту же самую команду -upload-file curl для URL-адреса в том же поле, поддерживаемом WebDAV, и это сработало.

Спасибо, Ник

ответ

0

Ну я продолжал искать вокруг и глядя на документы для конфигурации я увидел следующее:

runManagedModulesForWebDavRequests

при чтении следующей документации:

https://www.iis.net/configreference/system.webserver/modules

Я установил его в трюк e

<modules runManagedModulesForWebDavRequests="true"> 

и voila, PUT теперь работает для моего обработчика http. Я полагаю, что после установки WebDAV все PUT связаны с WebDAV? Я не знаю, но так кажется. Таким образом, похоже, что если у вас установлен WebDAV, вам необходимо отключить его, а затем установить этот флаг в true.