2017-02-16 101 views
2

,但我是新来的属性的路由,而我不知道这是为什么不工作时一切不 所以我有这个属性路由返回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 返回404 但如果我不 https://localhost:44363/api/statistics/getTopFiveCategories 这是SOM这样的代码

[HttpGet] 
    [Route("getTopFiveCategories")] 
    public IHttpActionResult GetTopFiveCategories() 

它的工作原理,我不知道为什么另一个人不能有人可以解释这个给我吗?

+0

这看起来像是路由模板中的'categoryId'和动作参数中的'cateogryId'之间的拼写错误 – Nkosi

回答

1

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

+0

仍然返回404这是因为它不是来自ajax调用或某事并且正在尝试从邮递员? – Harry

+0

@AvalothOath只要确保数据库中存在类别id 3,或者您正在使用的内存数据结构中是否存在类别id 3? – Sameer

+0

是的,我有我的项目simmilar路线,这一切都工作正常,所以我不知道为什么这样做; t – Harry

2

在萨米尔的答复的意见正确识别问题与类别与Catoegory一个错字。如您所见,方法签名中参数的名称和路径中参数的名称需要完全匹配。

我想在参数绑定方面进行一点扩展。鉴于你的类别id是一个简单类型的int,所以不需要[FromUri]。比方说,你有一些复杂的对象被传入,你希望它来自URL而不是body(如果你正在做一个POST,因为GET没有body)。在这种情况下,您将需要使用[FromUri]显式修饰参数,因为WebAPI2会自动假定复杂类型源自身体,除非您另行指定。

与此相反的情况也是如此。假设你正在POST一个简单的东西,像一个int,它在body中,而不是URL。您需要使用[FromBody]修饰参数,以告知WebAPI2将该值从POST正文中取出,而不是从URL中取出,否则它将作为默认值。

+0

谢谢你的一些有用的信息! – Harry