这是我的Web API配置:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ReaderTags",
routeTemplate: "Reader/{readerID}/Tags"
);
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
我希望当我调用URL /Reader/abc/Tags
时,它应该调用我的ReaderController的Tags操作并传递abc
作为字符串参数。
但是不知何故,它正在使用DefaultAPI
的路线,并试图在abc
中找到ReaderController
作为动作。
我想念什么?
答案 0 :(得分:4)
路由映射缺少默认值,该默认值会使路由表知道为匹配模板的路由要调用的控制器和操作
config.Routes.MapHttpRoute(
name: "ReaderTags",
routeTemplate: "Reader/{readerID}/Tags",
defaults: new { controller = "Reader", action = "Tags" }
);
路由模板还假定操作上的字符串参数共享相同的名称:即readerID
。
public IHttpActionResult Tags(string readerID) {
//...
}
由于还配置了config.MapHttpAttributeRoutes();
,因此可以通过属性路由而不是像这样的基于约定的路由来实现相同的目的
//GET Reader/abc/Tags
[HttpGet]
[Route("Reader/{readerID}/Tags")]
public IHttpActionResult Tags(string readerID) {
//...
}