但我是属性路由的新手,我不知道为什么这不起作用而其他一切都有效 所以我有这个
[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()
它有效,我不知道为什么另一个人不能有人向我解释这个?
答案 0 :(得分:2)
Sameer的回答中的评论正确地将问题识别为类别与Catoegory的拼写错误。如您所见,方法签名中的参数名称和路径中参数的名称必须完全匹配。
我想在参数绑定方面稍微扩展一下。鉴于您的类别ID是一个int,这是一个简单的类型,因此不需要[FromUri]。让我们说你传递了某种复杂的对象,你希望它从URL而不是身体进入(如果你正在进行POST,因为GET'有一个身体)。在这种情况下,您需要使用[FromUri]显式修饰参数,因为除非您另行指定,否则WebAPI2会自动假定复杂类型来自正文。
反过来也是如此。让我们假设你是一个简单的东西,比如一个int,它是在身体而不是URL。您需要使用[FromBody]来装饰参数,以告知WebAPI2从POST正文中捕获该值,而不是从URL中捕获该值,否则它将默认为。
答案 1 :(得分:1)
使用此[Route("categoryTagsByTotalIssues")]
在参数更新中public IHttpActionResult CategoryTagsByTotalIssues(int categoryId)