所以这真的让我很头疼。
路线:
config.routes.MapHttpRoute(
name: 'ControllerAction' ,
routeTemplate: "api/{controller}/{action}"
);
控制器:
public class LookupsController : ApiControllerBase
{
[ActionName("all")]
public Lookups GetLookups()
{
var lookups = new Lookups
{
Customers = GetCustomers().ToList(),
//add more
};
return lookups;
}
}
但是当我试图点击uri时:/ api / lookups / all 我收到404错误说:
“控制器'Lookups'上没有找到与名称'all'匹配的操作。”
任何帮助将不胜感激
编辑: 所以我终于明白了。 这是因为错误的依赖性。 VS2012将操作自动解析到system.web.mvc.actionnameattribute,而我需要的是system.web.http.actionnameattribute。
奇怪的问题,无论如何,我希望这有助于其他人。
答案 0 :(得分:1)
Jakob Li,
编辑:
您正在重命名控制器但未指定方法。 WebApi从前缀GET,PUT,DELETE,POST中解析该方法。因此,method属性必须放在action的签名处:
试试这个,对我有用:
的
的public class LookupsController : ApiControllerBase
{
[HttpGet()]
[ActionName("All")]
public Lookups GetLookups()
{
var lookups = new Lookups
{
Customers = GetCustomers().ToList(),
//add more
};
return lookups;
}
}
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
的
请点击此处了解有关路由的更多信息:
希望对你有所帮助!