代码之家  ›  专栏  ›  技术社区  ›  Piers Karsenbarg

如何停止ASP.NET web api PUT谓词返回500

  •  2
  • Piers Karsenbarg  · 技术社区  · 13 年前

    我正在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操作不起作用。

    1 回复  |  直到 13 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    看见 this stackoverflow question

    基本上,默认的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>
    
    推荐文章