Я пытаюсь выдать DELETE
ресурсу IIS7.5:
DELETE http://198.252.206.16:48251/Test/foo.ashx HTTP/1.1
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E)
Host: 198.252.206.16:48251
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
И сервер отвечает:
HTTP/1.1 500 Internal Server Error
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Wed, 12 Feb 2014 01:01:30 GMT
Content-Length: 0
Самое невероятное:
- он отлично работает внутри Cassini (веб-сервер на основе .NET, используемый Visual Studio)
- ничего не записывается в журнал событий Windows
- Пользовательские ошибки отключены на сайте
web.config
- Никакие глаголы не фильтруются (или все глаголы включены)
- Модуль WebDAV отключен.
- Модуль LiveStreamingHandler не установлен.
Почему IIS не работает?
Шаги по воспроизведению
Создайте веб-сайт с помощью общего обработчика:
Foo.ashx
<%@ WebHandler Language="C#" Class="Foo" %>
using System;
using System.Web;
public class Foo : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
}
public bool IsReusable { get { return false; } }
}
а затем выдать глагол DELETE
ресурсу. Вы можете использовать Fiddler для составления запроса, если хотите:
Как насчет других глаголов, которые вы задаете?
Ты не пытался воспроизвести его, не так ли? Хорошо, я покажу вам результаты здесь:
-
GET
: работает -
POST
: работает -
PUT
: работает -
HEAD
: работает -
TRACE
:501 Not Implemented
-
DELETE
:500 Internal Server Error
-
SEARCH
:405 Method Not Allowed
-
PROPFIND
:500 Internal Server Error
-
PROPPATCH
:500 Internal Server Error
-
PATCH
:405 Method Not Allowed
-
MKCOL
:405 Method Not Allowed
-
COPY
:500 Internal Server Error
-
MOVE
:500 Internal Server Error
-
LOCK
:500 Internal Server Error
-
UNLOCK
:500 Internal Server Error
-
OPTIONS
:200 OK
-
IISUCKSFOO
405 Method Not Allowed
И только для того, чтобы быть анальным retentive, фрагмент соответствующих частей из web.config
:
<?xml version="1.0"?>
<configuration>
<system.web>
<httpRuntime/>
<!-- IISFIX: By default IIS hides errors-->
<customErrors mode="Off"/>
<!-- IISFIX: By default IIS ignores the browser culture -->
<globalization culture="auto" uiCulture="auto"/>
<!--Doesn't work for ASP.net web-sites, only ASP.net applications-->
<trace enabled="true" requestLimit="40" localOnly="false" />
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.DirectoryServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
<add assembly="System.DirectoryServices.AccountManagement, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
</assemblies>
</compilation>
</system.web>
<!-- ASP.net web-sites do not support WebPageTraceListener (only ASP.net web-applications)
So this section doesn't work; and does nothing.
But if Microsoft ever fixes IIS, we will start working automagically. -->
<system.diagnostics>
<trace>
<listeners>
<add name="WebPageTraceListener" type="System.Web.WebPageTraceListener, System.Web, Version=2.0.3600.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</listeners>
</trace>
</system.diagnostics>
<system.webServer>
<!-- IISFIX: By default IIS ignores custom error pages -->
<httpErrors existingResponse="PassThrough"/>
<defaultDocument>
<files>
<clear/>
<add value="Default.htm"/>
<add value="Default.asp"/>
<add value="index.htm"/>
<add value="index.html"/>
<add value="iisstart.htm"/>
<add value="default.aspx"/>
<add value="test.htm"/>
</files>
</defaultDocument>
<!--IISFIX: By default IIS doesn't understand HTTP protocol-->
<security>
<requestFiltering>
<verbs>
<add verb="OPTIONS" allowed="true" />
<add verb="GET" allowed="true" />
<add verb="HEAD" allowed="true" />
<add verb="POST" allowed="true" />
<add verb="PUT" allowed="true" />
<add verb="TRACE" allowed="true" />
<add verb="DELETE" allowed="true" />
</verbs>
</requestFiltering>
</security>
<modules runAllManagedModulesForAllRequests="true">
<!--IISFIX: Whatever this is, it causes 405 Method Not Allowed errors on IIS when using PUT. (Microsoft broken by defult)-->
<remove name="WebDAVModule"/>
</modules>
</system.webServer>
</configuration>
Изменить - забыли скриншот глаголов:
Вопрос был достаточно прописан в названии. Остальная часть сообщения - это просто наполнитель, чтобы он выглядел так, будто он показывает исследовательские усилия; что означает, что вы должны его продвигать - подсказка на стрелке upvote говорит так!