【发布时间】:2015-09-14 23:52:21
【问题描述】:
我检查了其他在这里询问和回答的 sulotion sugessions,但仍然找不到我自己的代码有什么问题。
我有一个 'members' 和 'fals'(意思是 blogpost 之类的东西)控制器。每个成员都有自己的多个“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 存在,但无法弄清楚。
谢谢!
【问题讨论】:
-
如果从方法中删除“Route”属性会发生什么?例如
[HttpGet, ActionName("fals")] -
刚刚删除它,现在它看起来可以工作了!我虽然它是必需的,但是,意识到它不是。谢谢。
-
我猜它覆盖了默认路由,所以你可能会发现,如果你把路由放回去,但在没有
/api/部分的 URL 的情况下调用它也会起作用。我不确定您是否也使用了属性路由,如果没有,Route 属性如何与传统路由交互,所以有点猜测 - 我会添加它作为答案。跨度>
标签: c# asp.net-web-api