Вопрос по asp.net – ASP.NET Web API - команды PUT & DELETE не разрешены - IIS 8

128

Я недавно обновил Visual Studio 2010 до Visual Studio 2012 RC. Программа установки также устанавливает IIS 8 Express, который Visual Studio теперь использует в качестве веб-сервера по умолчанию.

IIS 8 блокирует мои запросы веб-API, которые используют глаголы PUT AND DELETE. IIS возвращает ошибку 405,The requested resource does not support http method 'PUT'.

Я знаю, что у людей были проблемы с этим в прошлом, и есть несколько сообщений об этом в переполнении стека. С IIS 7 Express было решено удалить WebDav. К сожалению, я не вижу никакого способа сделать это с IIS 8.

Я пытался отредактировать разделы WebDav из applicationhost.config, но это не помогло. Например я удалил<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" /> из файла конфигурации.

Я потратил слишком много времени на это. Должен быть простой способ включить PUT и DELETE?

Это все еще сломано в версии RTM. Просто потратил 3 часа на это ... Все, что нужно было добавить дополнительные глаголы вExtensionlessUrl-Integrated-4.0. leppie
Я также просто потратил 3 часа на это ... через 6 лет после этого поста. Brian Jenkins
Я не думаю, что это сломано, но по замыслу. Я думаю, что изменение поведения по умолчанию будет мешать WebDAV и нарушит обратную совместимость. Это также не работало с IIS7, когда был установлен WebDAV. Mark
пожалуйста, посмотрите наstackoverflow.com/a/55134621/4746570 BehrouzMoslem

Ваш Ответ

18   ответов
1

что вы редактировали правильный файл конфигурации. Попробуйте следующие шаги

open %userprofile%\ducuments\iisexpress\config\applicationhost.config

By default bellow given entries are commented in the applicationhost.config file. uncomment these entries.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />


<add name="WebDAVModule" />
<add name="WebDAV" path="*"
 verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK"
 modules="WebDAVModule" resourceType="Unspecified" requireAccess="None"
 />
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

я ошибка была 404.6 специально

<system.webServer>
  <security>
  <requestFiltering>
    <verbs applyToWebDAV="false">
       <add verb="DELETE" allowed="true" />
    </verbs>
  </requestFiltering>
  </security>
</system.webServer>
Error: User Rate Limit Exceeded
111

как показано ниже. Это будет действовать как очарование.

В узле<system.webServer> добавить ниже часть кода

<modules runAllManagedModulesForAllRequests="true">
  <remove name="WebDAVModule"/>
</modules>

После добавления ваш Web.Config будет выглядеть ниже

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <modules runAllManagedModulesForAllRequests="true">
        <remove name="WebDAVModule"/>
    </modules>
    <httpProtocol>
    <customHeaders>
        <add name="Access-Control-Allow-Origin" value="*" />
        <add name="Access-Control-Allow-Headers" value="Content-Type" />
        <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    </customHeaders>
    </httpProtocol>
    <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.NET\Framework\v4.0.30319\aspnet_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.NET\Framework64\v4.0.30319\aspnet_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>
</system.webServer>
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededWebDAVModuleError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededbritishdeveloper.co.uk/2010/06/…
Error: User Rate Limit Exceeded
-1

 [HttpPost]
 public void Delete(YourDomainModel itemToDelete)
 {
 }
5

кто может столкнуться с этой проблемой. На сегодняшний день изменение% userprofile% \ documents \ iisexpress \ config \ applicationhost.config больше не работает (до сих пор это работало нормально, не уверен, что это связано с обновлением Windows). После нескольких часов разочарования я изменил web.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.NET\Framework\v4.0.30319\aspnet_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.NET\Framework64\v4.0.30319\aspnet_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>
1

и ни один из приведенных выше ответов не работает для меня. IIS 10.

Вот что сработало. Вместо изменения & quot;ExtensionlessUrl-Integrated-4.0& Quot; в IIS или web.config я изменил & quot;SimpleHandlerFactory-Integrated-4.0& Quot; для & quot;*.ashx& Quot; файлы:

<add name="SimpleHandlerFactory-Integrated-4.0" path="*.ashx" 
verb="GET,HEAD,POST,DEBUG,PUT,DELETE" 
type="System.Web.UI.SimpleHandlerFactory" 
resourceType="Unspecified" requireAccess="Script" 
preCondition="integratedMode,runtimeVersionv4.0" />
155

колько обручей, чтобы глаголы PUT и DELETE работали правильно с IIS8. Фактически, если вы установите вариант релиза VS 2012 и создадите новый проект WEB API, вы обнаружите, что примеры методов PUT и DELETE возвращают 404 ошибки из коробки.

Чтобы использовать глаголы PUT и DELETE с Web API, вам нужно отредактировать% userprofile% \ documents \ iisexpress \ config \ applicationhost.config и добавить глаголы в обработчик ExtensionlessUrl следующим образом:

Измените эту строку:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

чтобы:

<add name="ExtensionlessUrl-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

В дополнение к вышесказанному вы должны убедиться, что WebDAV не мешает вашим запросам. Это можно сделать, закомментировав следующие строки из applicationhost.config.

<add name="WebDAVModule" image="%IIS_BIN%\webdav.dll" />
<add name="WebDAVModule" /> 
<add name="WebDAV" path="*" verb="PROPFIND,PROPPATCH,MKCOL,PUT,COPY,DELETE,MOVE,LOCK,UNLOCK" modules="WebDAVModule" resourceType="Unspecified" requireAccess="None" />

Также имейте в виду, что соглашение о веб-API по умолчанию состоит в том, что имя вашего метода должно совпадать с вызванным глаголом HTTP. Например, если вы отправляете HTTP-запрос на удаление, ваш метод по умолчанию должен называться «Удалить».

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededWebDAVModuleError: User Rate Limit ExceededSantosh Sah's answer.
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/a/14465655/428280
0

меня. Я не знаю, что подразумевается под удалением WebDAV, но это не решило проблему для меня.

Что помогло мне, это следующие шаги;

I went to IIS manager. In the left panel selected the site. In the left working area, selected the WebDAV, Opened it double clicking. In the right most panel, disabled it.

Сейчас все работает.

3

Open IIS Go to Handler Mappings click edit on php5.6.x or php7.0.x click "request restrictions" under the verbs tab, select "one of the following verbs" and add "GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS"

Я думаю, что это будет работать и с другими обработчиками.

Error: User Rate Limit Exceeded
0


Я изменил свой URL для метода Web Api в соответствии сэтот ответ:

Url.Action("MyAction", "MyApiCtrl", new { httproute = "" })

Но этот метод создает ссылку как:

/api/MyApiCtrl?action=MyAction

Это правильно работает с запросами GET и POST, но не с запросами PUT или DELETE.
Поэтому я просто заменил его на:

/api/MyApiCtrl

и это решило проблему.

40

  <system.webServer>
    <modules>
      <remove name="WebDAVModule"/>
    </modules>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrl-Integrated-4.0" />
      <add name="ExtensionlessUrl-Integrated-4.0"
           path="*."
           verb="GET,HEAD,POST,DEBUG,DELETE,PUT"
           type="System.Web.Handlers.TransferRequestHandler"
           preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer>

http://odetocode.com/blogs/scott/archive/2012/08/07/configuration-tips-for-asp-net-mvc-4-on-a-windows.aspx

Устраняет необходимость изменять настройки вашего хоста.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
2

проверьте, есть ли у вас & quot;id& Quot; или любой пользовательский определенный параметр в методе DELETE соответствует конфигурации маршрута.

public void Delete(int id)
{
 //some code here
}

Если вы столкнулись с повторными ошибками 405, лучше сбросьте сигнатуру метода по умолчанию, как описано выше, и попробуйте.

Конфиг маршрута по умолчанию будет искатьid в URL. Итак, имя параметраid здесь важно, если вы не измените конфигурацию маршрута вApp_Start папка.

Вы можете изменить тип данныхid хоть.

Например, приведенный ниже метод должен работать просто отлично:

public void Delete(string id)
{
 //some code here
}

Примечание. Также убедитесь, что вы передаете данные через URL, а не метод данных, который будет содержать полезную нагрузку в качестве основного содержимого.

DELETE http://{url}/{action}/{id}

Пример:

DELETE http://localhost/item/1

Надеюсь, поможет.

1

Вот решения, я хотел бы, может быть, может помочь
Первый

В IISmodules Конфигурация, цикл доWebDAVModule, если он есть на вашем веб-сервере, то удалите его

второй

В IIShandler mappings конфигурации, вы можете увидеть список включения обработчика, чтобы выбратьthe PHP item, отредактируйте его, на странице редактирования нажмите кнопку запроса ограничений, затем выберитеthe verbs tab в модальном поле в глаголах для метки дескриптора отметьтеall verbs radio, затем нажмите ОК, вы также можете увидеть предупреждение, оно показывает нам, что использовать двойные кавычки для выполнения PHP-CGI, а затем сделать это

если это сделано, то перезапустите сервер IIS, все будет в порядке

enter image description here

Error: User Rate Limit Exceeded
4

как ничего не получилось, я смог решить эту проблему с помощью следующих шагов:

& # X2022; Не выбрали & # x2018; WEB DAV PUBLISHING & # x2019; Настройки IIS, при установке IIS. & # X2022; INETMGR - веб-сайт по умолчанию & # x2013; Фильтрация запросов & # x2013; HTTP-глаголы & # x2013; PUT as True

3

бавление глаголов PUT, DELETE и удаление WEBdav) это просто не сработало.

Я зашел в настройки журналов IIS: & gt; Просмотр файлов журнала. В моем случае W3SVC4 был папкой с самой последней датой, открыл папку, посмотрел последний файл журнала и увидел эту запись: GET / Отклонено по UrlScan ~ / MYDOMAIN / API / ApiName / UpdateMETHOD

Метод обновления был указан с глаголом GET, странно, верно? Так что я гуглил для Rejected-By-UrlScan и нашел эту ссылку:UrlScan сломал мой блог.

Я пошел сюда:% windir% \ system32 \ inetsrv \ urlscan \ UrlScan.ini

По сути, UrlScan блокировал команды PUT и DELETE. Я открыл этот INI-файл, добавил PUT и DELETE в AllowVerbs и удалил их из списков DenyVerbs. Я сохранил INI-файл, и он работал! Так что для меня эти шаги были необходимы рядом с подсказками ExtensionlessUrlHandler.

Windows Webserver 2008 R2 (64-разрядная версия), IIS 7.5. Я использую это в сочетании с DotNetNuke (DNN) WebAPI. ASP.Net 4.0 Мой метод обновления:

[HttpPut]
[DnnAuthorize(StaticRoles = "MyRoleNames")]
public HttpResponseMessage UpdateMETHOD(DTO.MyObject myData)
1

го интерфейса IIS Manager.

In IIS Manager, select the site you wish to allow PUT or DELETE for.

Click the "Request Filtering" option. Click the "HTTP Verbs" tab.

Click the "Allow Verb..." link in the sidebar.

In the box that appears type "DELETE", click OK.

Click the "Allow Verb..." link in the sidebar again.

In the box that appears type "PUT", click OK.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
16

Добавьте следующий код в тег System.web

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost"/>
  </protocols>
</webServices>

Замените ваш тег system.webserver на приведенный ниже код

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Methods" value="GET,PUT,POST,DELETE" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
  </customHeaders>
</httpProtocol>
<modules runAllManagedModulesForAllRequests="false">
  <remove name="WebDAVModule" />
</modules>

<validation validateIntegratedModeConfiguration="false" />
<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.NET\Framework\v4.0.30319\aspnet_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.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />

  <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

</handlers>

CAUTIONError: User Rate Limit ExceededANYError: User Rate Limit Exceededbig security riskError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
4

1. добавить пакет CORS Nuget

Install-Package microsoft.aspnet.webapi.cors

2. в файле WebApiConfig.cs для регистрации метода добавьте следующий код:

config.EnableCors();

например:
    используя System.Web.Http;

namespace test
{
public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services


        config.EnableCors(); //add this**************************


        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );           
    }
}
}

3.Добавьте приведенный ниже код в пространство имен контроллера, включите get, post, delete, put или любой http метод

[EnableCors(origins: "The address from which the request comes", headers: "*", methods: "*")]

например:

using System.Web.Http.Cors;//add this******************************
namespace Test.Controllers
{
[EnableCors(origins: "http://localhost:53681/HTML/Restaurant.html", headers: "*", methods: "*")]
public class RestaurantController : ApiController
{
    protected TestBusinessLayer DevTestBLL = new TestBusinessLayer();

    public List<Restaurant> GET()
    {
        return DevTestBLL.GetRestaurant();
    }

    public List<Restaurant> DELETE(int id)
    {
        return DevTestBLL.DeleteRestaurant(id);
    }       
}
}

ссылка :http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api

Похожие вопросы