C# 不允许使用Web Api 2方法(405)
我在VS2013中创建了一个默认的Web Api 2项目。控制器中的PUT操作如下所示:C# 不允许使用Web Api 2方法(405),c#,asp.net-web-api2,http-put,C#,Asp.net Web Api2,Http Put,我在VS2013中创建了一个默认的Web Api 2项目。控制器中的PUT操作如下所示: // PUT: api/Events/5 [HttpPut] [ResponseType(typeof(void))] public IHttpActionResult PutEvent(int id, Event @event) { if (!ModelState.IsValid) { return BadRe
// 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);
}
<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>
我的web.config如下所示:
// 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);
}
<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>
当我运行项目并尝试使用Postman调用api(使用原始json数据)时,服务器返回:
请求的资源不支持http方法“PUT”
我看了这篇文章,但没有看到我做了什么不同(除了我添加了
)。但是如果没有,它也不起作用。结果是我不得不更改我的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);
}
您正在使用
HttpPut
,因此无法从url获取id,只能从[FromBody]
或[FromUrl]
获取id作为参数参数。您的控制器是否名为事件控制器
?您的Event@Event
应该有一个[FromBody]
attribute@gauravbhavsar身份证是个问题。当我移除它时,问题是solved@kwv84很高兴你解决了这个问题,请更新你的修复问题。