我收到错误 - 控制器'Action'上没有找到与请求匹配的操作。
网址为http://localhost:37331/api/action/FindByModule/1
。
我使用的路由是
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
控制器:
public class ActionController : ApiController
{
private IActionRepository repository = null;
[HttpGet]
[ActionName("All")]
public IEnumerable<JsonAction> All()
{
return from action in this.repository.Get()
select new JsonAction
{
ID = action.ID,
Text = action.Text.Trim(),
Description = action.Description.Trim(),
};
}
[HttpGet]
[ActionName("FindByModule")]
public IEnumerable<JsonAction> FindByModule(Int64 moduleId)
{
return from action in this.repository.FindByModule(moduleId)
select new JsonAction
{
ID = action.ID,
Text = action.Text.Trim(),
Description = action.Description.Trim(),
};
}
}
答案 0 :(得分:102)
这是因为参数名称不匹配。在您的路线中,值 1 会分配给名为id
的参数,您的操作正在寻找名为moduleId
的参数。
第一个选择是改变你的路线:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{moduleId}",
defaults: new { moduleId = RouteParameter.Optional }
);
其次是更改您的网址:
http://localhost:37331/api/action/FindByModule?moduleId=1
所以参数名称匹配。