2

我在 IIS 7.5 上运行 ASP.NET Web API 应用程序。当我尝试使用 PUT 动词访问任何内容时,我收到 500 错误。

当我在本地机器上使用 IIS Express 运行相同的代码时,我得到了我期望的响应。

值得注意的是,我收到了405 Method not found响应,因此我删除了 IIS 模块中的 WebDav 引用。

我正在使用 Visual Studio 在您首次创建项目时为您提供的控制器:

public class ValuesController : ApiController
{
    // GET api/values
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    public HttpResponseMessage Post()
    {
        return Request.CreateResponse(HttpStatusCode.Ambiguous);
    }

    // PUT api/values/5
    [System.Web.Http.AcceptVerbs("PUT")]
    public HttpResponseMessage Put()
    {
        return Request.CreateResponse(HttpStatusCode.SeeOther);
    }

    // DELETE api/values/5
    public void Delete(int id)
    {
    }
}

(有几个变化)。当我运行 POST/GET 操作时,我得到了我期望的响应,但 PUT 没有工作。

4

1 回答 1

2

看到这个stackoverflow问题

基本上默认的 ExtensionlessUrlHandler 不接受 PUT 和 DELETE 动词。只需将它们添加到 web.config

<system.webServer>
    <handlers>
        <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
        <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
</system.webServer>
于 2013-09-20T06:26:59.863 回答