如何在IIS中为ASP.NET MVC启用HTTP PUT和DELETE?

age*_*t47 56 c# http-put iis-7.5 asp.net-mvc-3 http-delete

我使用HTTP PUTDELETE我的ASP.NET MVC3应用.当我在本地运行时,每件事都能正常工作; 但是当我将应用程序发布到服务器时,这些方法不起作用.

是否有任何特殊设置可以使Web服务器支持PUTDELETE请求?我正在使用IIS 7.5的共享主机.

更新:

我启用PUTDELETE请求IIS manager.PUT命令工作正常.但DELETE仍然行不通.我创建请求jQuery:

我在这个页面:

http://domain.com/dashboard/edit-site/103323/links/
Run Code Online (Sandbox Code Playgroud)

我的ajax电话是:

$.ajax({
    // url: same as page-url,
    cache: false,
    type: 'DELETE',
    data: { linkid: $(link).data("linkid") },
    beforeSend: function () {
        // doing something in UI
    },
    complete: function () {
        // doing something in UI
    },
    success: function (data) {
        // doing something in UI
    },
    error: function () {
        // doing something in UI
    }
});
Run Code Online (Sandbox Code Playgroud)

这将创建一个这样的请求:

Accept: */*
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Origin: http://domain.com
Referer: http://domain.com/dashboard/edit-site/103323/links/
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
X-Requested-With: XMLHttpRequest
Run Code Online (Sandbox Code Playgroud)

有了这个Form Data:

linkid:104044
Run Code Online (Sandbox Code Playgroud)

dan*_*elQ 80

进入处理程序映射IIS管理器.查找ExtensionlessUrlHandler-Integrated-4.0,双击它.单击" 请求限制..."按钮,然后在"动词"选项卡上添加DELETEPUT. 在此输入图像描述


编辑:可能的WebDav Publisher问题

您是否提到过您在2008服务器上运行的已删除帖子?尝试删除webDav角色,或从您的站点禁用它config:在system.webServer- > modules部分,删除WebDAVModule模块:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

  • 我们试着删除WebDav.请参阅答案编辑:**可能的WebDav Publisher问题**. (7认同)
  • 我以前做过这些东西.但仍然没有效果): (2认同)
  • 删除模块和处理程序都非常重要。我错过了第一次在IIS中删除该模块,一阵子很困惑! (2认同)

小智 40

如果您在asp.net web api中的生产环境中遇到以下错误,PUT或者DELETE这些方法在本地工作正常.

405 - 不允许用于访问此页面的http动词.

只需在服务器的web.config中添加以下设置即可

<system.webServer>
    <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
    <modules>
        <remove name="WebDAVModule" />
    </modules>
</system.webServer>
Run Code Online (Sandbox Code Playgroud)

原因:默认情况下,webDAV模块会阻止PUT/DELETE方法.首先删除此模块及其处理程序.我们首先删除任何现有的ExtensionlessUrlHandler-Integrated-4.0设置,并添加所需的pathverbs.


小智 9

您只需在web.config中添加以下代码行

<system.webServer>
 <security>
    <requestFiltering>
        <verbs allowUnlisted="false">
            <add verb="GET" allowed="true" />
            <add verb="POST" allowed="true" />
            <add verb="DELETE" allowed="true" />
            <add verb="PUT" allowed="true" />
        </verbs>
    </requestFiltering>
</security>
Run Code Online (Sandbox Code Playgroud)

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>
Run Code Online (Sandbox Code Playgroud)