Я в процессе написания 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, и это сработало.
Спасибо, Ник