我有MVC Web API,具有POST和PUT功能; POST函数调用成功,但PUT函数调用失败:
内部服务器错误;
功能相同“我一次使用一个功能,另一个功能将被评论;仅用于测试目的”。
public HttpResponseMessage Put(string id)
{
HttpStatusCode statusCode = HttpStatusCode.OK;
return Request.CreateResponse<string>(statusCode, id);
}
public HttpResponseMessage Post(string id)
{
HttpStatusCode statusCode = HttpStatusCode.OK;
return Request.CreateResponse<string>(statusCode, id);
}
编辑:在我的机器上本地可以正常使用POST和PUT(Windows 8.1);但当我将它移动到另一台机器(Windows Server 2012)时,只有POST功能可以工作。
答案 0 :(得分:0)
当您不知道资源标识符时,使用POST创建资源。使用POST创建时,最佳做法是返回“201 Created”的状态以及新创建的资源的位置,因为在提交时其位置未知。这允许客户端稍后在需要时访问新资源
答案 1 :(得分:0)
最后我找到了解决此问题的方法,似乎WebDav中存在问题,在某些情况下,仅从应用程序Web中删除它是不够的。您应该通过本文中的步骤从IIS中禁用它How to disable WEBDAV in IIS
当我发现WebDav确实从应用程序Web中删除它时,我会更新这个答案。对于Windows 2012而言,这个问题还不够,但在Windows 8.1中工作正常
答案 2 :(得分:0)
我遇到了同样的问题。我在Visual Studio中调试时PUT和DELETE端点工作,但是当我部署到IIS时没有。
我已经添加了这个
<system.webServer>
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
在我的web.config中,所以我没有考虑WebDav。 Ebraheem的回答让我更加关注WebDav。
结束IIS服务器在功能和角色中启用了WebDav发布。所以我删除了它,现在一切都按预期工作。
答案 3 :(得分:0)
我可能回答得很晚,但想分享我的解决方案以帮助仍然遇到此问题的任何人。
删除<remove name="WebDAVModule" />
是不够的。我发现的是,您还必须将其专门从处理程序中删除,并且还要确保允许动词,您可以在安全性节点中进行设置。以下是我在web.config中设置的内容,该内容允许放置和删除操作而无需在IIS中进行任何设置。
<!-- After the <system.web> node -->
<system.webServer>
<handlers>
<!-- default handler settings here if any -->
<!-- Add the following to remove WebDAV handler -->
<remove name="WebDAV" />
</handlers>
<modules runAllManagedModulesForAllRequests="false">
<!-- Add the following to remove WebDAV module -->
<remove name="WebDAVModule" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
<security>
<!-- Add the following to specifically allow the GET,POST,DELETE and PUT verbs -->
<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>
</system.webServer>
希望这会有所帮助。