如何启用HTTP PUT和DELETE IIS用于ASP.NET MVC?(How do I ena

2019-06-18 04:42发布

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

是否有使Web服务器支持任何特殊设置PUTDELETE请求? 我使用的是共享与IIS 7.5托管。

更新:

启用PUTDELETE请求中IIS managerPUT命令做工精细。 但是, DELETE仍然没有工作。 我通过创建请求jQuery

我在这个页面:

http://domain.com/dashboard/edit-site/103323/links/

和我的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
    }
});

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

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

有了这个Form Data

linkid:104044

Answer 1:

进入处理程序映射IIS管理器 。 查找ExtensionlessUrlHandler-Integrated-4.0 ,双击它。 单击请求限制...按钮,动词选项卡上,同时添加DELETEPUT


编辑:可能的WebDav出版商问题

你别说你是在2008年的服务器对运行删除帖子? 尝试删除WebDAV角色,或者从您的网站禁用它config :在system.webServer - > modules部分,删除WebDAVModule模块:

<system.webServer>
  <modules>
    <remove name="WebDAVModule" />
  </modules>
  <handlers>
    <remove name="WebDAV" />
  </handlers>
</system.webServer>


Answer 2:

如果您收到以下错误在生产环境中asp.net网页API上PUTDELETE虽然这些方法是在本地工作的罚款。

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>

原因: WEBDAV PUT /模块块删除默认的方法。 因此,首先删除此模块及其处理程序。 我们首先删除任何现有ExtensionlessUrlHandler集成-4.0的设置,并根据需要添加它pathverbs



Answer 3:

你只需要添加以下代码行中你的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>

<modules>
    <remove name="WebDAVModule" />
</modules>
<handlers>
    <remove name="WebDAV" />
</handlers>


Answer 4:

最后,我找到了答案侥幸。 我改变了jQuery调用下面寿和它现在运作良好。

$.ajax({ 
    url: this.href + "?linkid=" + $(link).data("linkid"), 
    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 
    } 
});

你有为什么任何解释DELETE召唤,不能有Form Data ? 虽然当地它有和工作得很好?



文章来源: How do I enable HTTP PUT and DELETE for ASP.NET MVC in IIS?