我使用HTTP PUT
和DELETE
在我的ASP.NET MVC3应用。 当我在本地运行,每一件事情正常工作; 但是,当我发布应用程序到服务器上,这些方法不起作用。
是否有使Web服务器支持任何特殊设置PUT
和DELETE
请求? 我使用的是共享与IIS 7.5托管。
更新:
启用PUT
和DELETE
请求中IIS manager
。 PUT
命令做工精细。 但是, 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
进入处理程序映射在IIS管理器 。 查找ExtensionlessUrlHandler-Integrated-4.0
,双击它。 单击请求限制...按钮,动词选项卡上,同时添加DELETE
和PUT
。
编辑:可能的WebDav出版商问题
你别说你是在2008年的服务器对运行删除帖子? 尝试删除WebDAV角色,或者从您的网站禁用它config
:在system.webServer
- > modules
部分,删除WebDAVModule
模块:
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="WebDAV" />
</handlers>
</system.webServer>
如果您收到以下错误在生产环境中asp.net网页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>
原因: WEBDAV PUT /模块块删除默认的方法。 因此,首先删除此模块及其处理程序。 我们首先删除任何现有ExtensionlessUrlHandler集成-4.0的设置,并根据需要添加它path
和verbs
。
你只需要添加以下代码行中你的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>
最后,我找到了答案侥幸。 我改变了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
? 虽然当地它有和工作得很好?