属性路由returns 404
Attribute routing returns 404
但我是属性路由的新手,我不知道为什么这不起作用而其他一切都起作用
所以我有这个
[RoutePrefix("api/statistics")]
public class StatisticsController : ApiController
然后我有
[HttpGet]
[Route("categoryTagsByTotalIssues/{categoryId:int}")]
public IHttpActionResult CategoryTagsByTotalIssues(int cateogryId)
当邮递员呼叫时
https://localhost:44363/api/statistics/categoryTagsByTotalIssues/3
returns一个404
但如果我这样做
https://localhost:44363/api/statistics/getTopFiveCategories
在代码中是这样的
[HttpGet]
[Route("getTopFiveCategories")]
public IHttpActionResult GetTopFiveCategories()
它有效,我不知道为什么另一个不能给我解释一下?
使用这个[Route("categoryTagsByTotalIssues")]
并在参数中更新此 public IHttpActionResult CategoryTagsByTotalIssues(int categoryId)
Sameer 的回答中的评论正确地将问题识别为 Category 与 Catoegory 的拼写错误。如您所见,方法签名中的参数名称和路由中的参数名称需要完全匹配。
我想在参数绑定方面对此进行一些扩展。鉴于您的类别 ID 是一个简单类型的 int,因此不需要 [FromUri]。假设您传入了某种复杂的 object 并且您希望它从 URL 而不是 body 传入(如果您正在执行 POST,因为 GET 没有 body)。在这种情况下,您需要使用 [FromUri] 显式修饰参数,因为 WebAPI2 会自动假定复杂类型源自 body,除非您另有指定。
反之亦然。假设您正在 POST'ing 一个简单的东西,比如 int,它在 body 而不是 URL 中。您需要用 [FromBody] 修饰参数,以告诉 WebAPI2 从 POST body 而不是 URL 中获取该值,否则它将是默认值。
但我是属性路由的新手,我不知道为什么这不起作用而其他一切都起作用 所以我有这个
[RoutePrefix("api/statistics")]
public class StatisticsController : ApiController
然后我有
[HttpGet]
[Route("categoryTagsByTotalIssues/{categoryId:int}")]
public IHttpActionResult CategoryTagsByTotalIssues(int cateogryId)
当邮递员呼叫时 https://localhost:44363/api/statistics/categoryTagsByTotalIssues/3 returns一个404 但如果我这样做 https://localhost:44363/api/statistics/getTopFiveCategories 在代码中是这样的
[HttpGet]
[Route("getTopFiveCategories")]
public IHttpActionResult GetTopFiveCategories()
它有效,我不知道为什么另一个不能给我解释一下?
使用这个[Route("categoryTagsByTotalIssues")]
并在参数中更新此 public IHttpActionResult CategoryTagsByTotalIssues(int categoryId)
Sameer 的回答中的评论正确地将问题识别为 Category 与 Catoegory 的拼写错误。如您所见,方法签名中的参数名称和路由中的参数名称需要完全匹配。
我想在参数绑定方面对此进行一些扩展。鉴于您的类别 ID 是一个简单类型的 int,因此不需要 [FromUri]。假设您传入了某种复杂的 object 并且您希望它从 URL 而不是 body 传入(如果您正在执行 POST,因为 GET 没有 body)。在这种情况下,您需要使用 [FromUri] 显式修饰参数,因为 WebAPI2 会自动假定复杂类型源自 body,除非您另有指定。
反之亦然。假设您正在 POST'ing 一个简单的东西,比如 int,它在 body 而不是 URL 中。您需要用 [FromBody] 修饰参数,以告诉 WebAPI2 从 POST body 而不是 URL 中获取该值,否则它将是默认值。