500 PUT Web API处的内部服务器错误

时间:2016-01-12 08:17:13

标签: c# asp.net-mvc-4 asp.net-web-api

我有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功能可以工作。

4 个答案:

答案 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>

希望这会有所帮助。