属性路由返回404

时间:2017-02-16 17:34:53

标签: c# asp.net-web-api routing asp.net-routing

但我是属性路由的新手,我不知道为什么这不起作用而其他一切都有效 所以我有这个

[RoutePrefix("api/statistics")]
 public class StatisticsController : ApiController

然后我有

 [HttpGet]
    [Route("categoryTagsByTotalIssues/{categoryId:int}")]
    public IHttpActionResult CategoryTagsByTotalIssues(int cateogryId)

从邮递员那里打电话 https://localhost:44363/api/statistics/categoryTagsByTotalIssues/3 返回404 但如果我这样做 https://localhost:44363/api/statistics/getTopFiveCategories 在代码

中是这样的
 [HttpGet]
    [Route("getTopFiveCategories")]
    public IHttpActionResult GetTopFiveCategories()

它有效,我不知道为什么另一个人不能有人向我解释这个?

2 个答案:

答案 0 :(得分:2)

Sameer的回答中的评论正确地将问题识别为类别与Catoegory的拼写错误。如您所见,方法签名中的参数名称和路径中参数的名称必须完全匹配。

我想在参数绑定方面稍微扩展一下。鉴于您的类别ID是一个i​​nt,这是一个简单的类型,因此不需要[FromUri]。让我们说你传递了某种复杂的对象,你希望它从URL而不是身体进入(如果你正在进行POST,因为GET'有一个身体)。在这种情况下,您需要使用[FromUri]显式修饰参数,因为除非您另行指定,否则WebAPI2会自动假定复杂类型来自正文。

反过来也是如此。让我们假设你是一个简单的东西,比如一个int,它是在身体而不是URL。您需要使用[FromBody]来装饰参数,以告知WebAPI2从POST正文中捕获该值,而不是从URL中捕获该值,否则它将默认为。

答案 1 :(得分:1)

使用此[Route("categoryTagsByTotalIssues")] 在参数更新中public IHttpActionResult CategoryTagsByTotalIssues(int categoryId)