我遇到以下问题,我的路线属性无效。
我有以下行动:
[HttpGet]
[Route("~api/admin/template/{fileName}")]
public HttpResponseMessage Template(string fileName)
{
return CreateHtmlResponse(fileName);
}
我希望访问.../api/admin/template/login.html
之类的操作,以便将模板get login.html 作为文件名传递。
但我总是得到:No HTTP resource was found that matches the request URI 'http://localhost:50121/api/admin/template/login.html'
。
以下请求有效:/api/admin/template?fileName=login.html
有谁知道,我的路由错误了什么?
修改:
我的路线配置
config.Routes.MapHttpRoute(
"API Default", "api/{controller}/{action}",
new { id = RouteParameter.Optional });
答案 0 :(得分:6)
try adding a forward slash after the tilde
[HttpGet]
[Route("~/api/admin/template/{fileName}")]
public HttpResponseMessage Template(string fileName)
{
return CreateHtmlResponse(fileName);
}
答案 1 :(得分:5)
检查Route属性的命名空间。它应该是 System.Web.Http 而不是 System.Web.Mvc 。
答案 2 :(得分:4)
您必须调用MapHttpAttributeRoutes()
,以便框架能够遍历您的属性并在应用程序启动时注册适当的路由:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.MapHttpAttributeRoutes();
// you can add manual routes as well
//config.Routes.MapHttpRoute(...
}
}
请参阅MSDN
答案 3 :(得分:2)
确定您使用的是System.Web.Http.RouteAttribute
而非System.Web.Mvc.RouteAttribute
答案 4 :(得分:1)
在WebApiConfig
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
您必须添加RoutePrefix
。
答案 5 :(得分:1)
使用我的Web API 2项目,我不得不向控制器添加[RoutePrefix("events")]
,以便它获取动作路由属性。
答案 6 :(得分:0)
在我的情况下,我将Route("api/dashboard")
添加到api控制器。
将其更改为RoutePrefix("api/dashboard")
。而且效果很好。
您还需要webapiconfig.cs中的config.MapHttpAttributeRoutes();