簡體   English   中英

不允許使用Web Api 2方法(405)

[英]Web Api 2 Method Not Allowed (405)

我在VS2013中創建了一個默認的Web Api 2項目。 我在控制器中的PUT操作如下所示:

    // PUT: api/Events/5
    [HttpPut]
    [ResponseType(typeof(void))]
    public IHttpActionResult PutEvent(int id, Event @event)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }

        if (id != @event.Id)
        {
            return BadRequest();
        }

        db.Entry(@event).State = EntityState.Modified;

        try
        {
            db.SaveChanges();
        }
        catch (DbUpdateConcurrencyException)
        {
            if (!EventExists(id))
            {
                return NotFound();
            }
            else
            {
                throw;
            }
        }

        return StatusCode(HttpStatusCode.NoContent);
    }

我的web.config看起來像這樣:

<handlers>
      <remove name="WebDAV"/>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>

而且我的WebConfig.cs中包含以下代碼

// Web API routes
config.MapHttpAttributeRoutes();

config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
);

當我運行項目並嘗試使用Postman調用api(帶有原始json數據的PUT)時,服務器返回:

請求的資源不支持http方法“ PUT”

我看過這篇文章,但是看不到我在做什么(除了我添加了<remove name="WebDAV" /> )。 但是沒有它也是行不通的。

原來,我必須更改我的PUT操作並刪除ID:

// PUT: api/Events/5
[HttpPut]
[ResponseType(typeof(void))]
public IHttpActionResult PutEvent(int id, Event @event)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    if (id != @event.Id)
    {
        return BadRequest();
    }

    db.Entry(@event).State = EntityState.Modified;

    try
    {
        db.SaveChanges();
    }
    catch (DbUpdateConcurrencyException)
    {
        if (!EventExists(id))
        {
            return NotFound();
        }
        else
        {
            throw;
        }
    }

    return StatusCode(HttpStatusCode.NoContent);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM