500 PUT Web API出现内部服务器错误
本文关键字:内部 服务器 错误 PUT Web API | 更新日期: 2023-09-27 18:29:52
我有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功能可以工作。
当您不知道资源标识符时,使用POST创建资源。对于POST创建,最佳做法是返回"201已创建"的状态和新创建的资源的位置,因为在提交时其位置未知。这允许客户端稍后在需要时访问新资源
最后我找到了这个问题的解决方案,似乎WebDav中有一个问题,在某些情况下,将其从应用程序Web中删除是不够的。Config您应该按照本文中的步骤从IIS中禁用它如何在IIS 中禁用WebDav
当我发现WebDav到底有什么问题时,我会更新这个答案,这使得从应用程序Web.Config中删除它对于windows 2012来说不够,但在windows 8.1 中运行良好
我也遇到了同样的问题。PUT和DELETE端点在我在visualstudio中调试时工作,但在我部署到IIS时不工作。
我已经添加了这个
<system.webServer>
<modules runAllManagedModulesForAllRequests="false">
<remove name="WebDAVModule" />
</modules>
</system.webServer>
在我的web.config中,所以我没有考虑WebDav。Ebraheem的回答让我仔细看了看WebDav。
最终IIS服务器在"功能和角色"中启用了WebDav发布。所以我删除了它,现在一切都如预期。
移除<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>