我们有一个MVC项目,我正在尝试更新以包含WebApi。为了获得所需的路由,我们使用AttributeRouting。除了PUT之外,所有的调用似乎都在正确路由,它返回405。我已经简化了控制器和操作,但仍然收到PUT错误,除非我还包含HttpPut。不确定我错过了什么。
[RoutePrefix("api/Sites")]
public class SitesController : BaseApiController
{
[POST("")]
public bool CreateSite(SiteSignupArgs args)
{
...
}
[GET("Statuses")]
public IList<SiteAuditViewModel> GetStatuses()
{
...
}
[PUT("Statuses/{siteId}")]
[HttpPut] // This is required or 405 is returned
public HttpResponseMessage UpdateStatus(string siteId, UpdateStatusArgs args)
{
...
}
[DELETE("Statuses/{siteId}")]
public HttpResponseMessage Delete(string siteId)
{
return Request.CreateResponse(HttpStatusCode.OK);
}
}AttributeRouting.Core、AttributeRouting.Core.Http、AttributeRouting.Core.Web、AttributeRouting.WebApi的3.5.6版
MVC4
未安装WebDAV。
发布于 2013-06-20 01:00:50
您所看到的是一种预期行为。Web中的动作选择器默认假设动作是动词POST,如果动作名称没有动词前缀,如"Get“、"Post”、"Put“、"Delete”等。
现在,即使您显式地指定了[PUT("Statuses/{siteId}")]属性,它也不能工作,因为操作选择器从System.Web.Http名称空间中查找属性,如HttpGetAttribute、HttpPostAttribute、HttpPutAttribute等。
由于AttributeRouting的PUTAttribute不是上述类型,因此操作选择器不会考虑它,仍然认为它是默认类型,即POST。因此,使用HttpPut属性的变通方法是正确的。
https://stackoverflow.com/questions/17196731
复制相似问题