[英]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.