【问题标题】:Routing error: No HTTP resource was found that matches the request URI路由错误:未找到与请求 URI 匹配的 HTTP 资源
【发布时间】:2019-08-27 19:42:58
【问题描述】:
【问题讨论】:
标签:
c#
asp.net-web-api
asp.net-web-api2
asp.net-web-api-routing
【解决方案1】:
从此改变:
[RoutePrefix("v1/reports")]
到这里:
[RoutePrefix("api/v1/reports")]
因为:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
见routeTemplate: "api/{controller}/{action}/{id}",你说所有路径的前缀都是api,{controller}/{action}/{id} 是占位符
结论:如果你要在任何地方使用v1前缀,把它代替api
【解决方案2】:
如果您在WebApiConfig 中启用了属性路由,您应该可以工作
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes(); //<-- THIS HERE
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
参考Attribute Routing in ASP.NET Web API 2: Enabling Attribute Routing
假设
[Authorize]
[RoutePrefix("v1/reports")]
public class ReportV1Controller : ApiController {
//GET v1/reports
[Route("")]
[HttpGet]
public IHttpActionResult GetReports() {
//...
}
}