不允许使用 Web Api 2 方法 (405)
Posted
技术标签:
【中文标题】不允许使用 Web Api 2 方法 (405)【英文标题】:Web Api 2 Method Not Allowed (405) 【发布时间】:2016-04-18 10:38:19 【问题描述】:我在 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'
我查看了this 的帖子,但看不出我在做什么不同(除了我添加了<remove name="WebDAV" />
)。但没有它也行不通。
【问题讨论】:
你使用的是HttpPut
,所以你不能从url获取id,而是从[FromBody]
或[FromUrl]
作为参数参数。
你的控制器叫EventsController
吗?你的Event @event
应该有一个[FromBody]
属性
@gauravbhavsar id 是问题所在。当我删除它时,问题就解决了
@kwv84 很高兴你解决了这个问题,请更新你的修复问题。
【参考方案1】:
原来我必须更改我的 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);
【讨论】:
以上是关于不允许使用 Web Api 2 方法 (405)的主要内容,如果未能解决你的问题,请参考以下文章
在 DELETE 上不允许使用 Owin 自托管 Web API 405 方法