我正在尝试进行API调用
http://localhost:56578/v1/reports
叫我的GetReports()
方法。
但是,我继续在主题中收到错误消息。
我通过路由前缀跟踪ms文档:
我究竟做错了什么?
ReportV1Controller.cs
[Authorize]
[RoutePrefix("v1/reports")]
....
....
[Route("")]
public IHttpActionResult GetReports()
WebApiConfig.cs
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
改变一下:
[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
只要您在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() {
//...
}
}