2015-09-13 121 views
2

我检查了其他在此提出并回答的问题,但仍无法找到我自己的代码出现问题。ASP.NET Web API错误:找不到与请求URL匹配的HTTP资源

我有一个 '构件' 和 'FALS'(意味着像博客帖子)控制器。每个成员都有自己的'fals'记录,所以我想列出'fals'属于特定成员。

我想自定义操作添加到我的Web API做这个工作,这里是:

[HttpGet, ActionName("fals"), Route("members/{id}/fals")] 
    public IQueryable<Fal> fals(int id) 
    { 
     Member member = db.Members.Find(id); 
     return member.Fals(); 
    } 

所以,这里是WebApiConfig定制:

  config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}/{action}", 
      defaults: new { id = RouteParameter.Optional, action = RouteParameter.Optional } 
     ); 
     config.Routes.MapHttpRoute(
      name: "DefaultApiWithAction", 
      routeTemplate: "api/{controller}/{id}/{action}" 
     ); 

我知道有两个路线,即使我评论或取消注释第二条路线,它也不会改变。

当我尝试调用http://localhost:51601/api/members/1/fals URL,它说:

{ 
"Message": "No HTTP resource was found that matches the request URI 'http://localhost:51601/api/members/1/fals'.", 
"MessageDetail": "No action was found on the controller 'Members' that matches the name 'fals'."} 

ID 1存在,因为我粘贴FALS存在的代码,但不能想通了。

谢谢!

+1

如果从方法中删除“路由”属性会发生什么?例如'[HttpGet,ActionName(“fals”)]' –

+0

刚刚删除它,现在它看起来像工作!我虽然这是必需的,但意识到它不是。谢谢。 –

+0

我想它是覆盖默认路由,所以你可能会发现,如果你把路由放回去,但是不用URL的'/ api /'部分来调用它就可以工作。我不确定你是否也使用属性路由,如果你不是,路由属性如何与传统路由交互,所以这是一个猜测 - 我将它添加为答案。 –

回答

0

我不确定您是否使用属性路由或尝试从控制器操作中删除路由属性。

[HttpGet, ActionName("fals")] 

如果路由被“干扰”与传统的路由我希望这会工作,或者你也可以尝试调用URL不带/ API /一部分,因为它从路由丢失你在指定的属性。

相关问题