Tha*_*had 5 asp.net-web-api attributerouting
我有一个MVC项目,我试图更新以包括WebApi.为了获得所需的路由,我们使用AttributeRouting.除了返回405的[PUT]之外,所有调用似乎都正确路由.我已经简化了控制器和操作,并且仍然使用[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);
}
}
Run Code Online (Sandbox Code Playgroud)
AttributeRouting.Core 3.5.6版,AttributeRouting.Core.Http,AttributeRouting.Core.Web,AttributeRouting.WebApi
MVC4
未安装WebDAV.
你所看到的是预期的行为.默认情况下,POST
如果操作名称没有带有"Get","Post","Put","Delete"等动词的前缀,则Web API中的Action Selector假定操作为动词.
现在即使你[PUT("Statuses/{siteId}")]
明确指定了属性它也不起作用,因为,Action选择器从System.Web.Http
HttpGetAttribute,HttpPostAttribute,HttpPutAttribute等命名空间查找属性.
由于AttributeRouting的PUTAttribute不属于上述类型,因此Action选择器不会考虑它,仍然认为它是默认值,即POST
.所以你的HttpPut
属性的解决方法是正确的.
归档时间: |
|
查看次数: |
2156 次 |
最近记录: |