使用ASP.NET Web API 帮助页面和相关的MVC.ApiExplorer 时,我有可通过 http 访问但 ApiExplorer 未发现的有效路由。只有在使用通用路由规则时才能找到这些路由。使用更具体的规则(与一般规则一起)似乎隐藏了 ApiExplorer 的路线。
在三个规则的示例情况下,两条路由与控制器方法上的 GET 和 POST 操作相关,它们不采用查询参数进入 MIA。
public class SomeControllerController : ApiController
{
[HttpPost] public HttpResponseMessage Post(PostObject value) { ... }
[HttpGet] public IEnumerable<DisplayObject> GetAll() { ... }
[HttpGet] public DisplayObject GetById(string id) { ... }
}
使用路由规则时
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
路由由 Api Explorer 适当地发现为
- 发布:api/SomeController
- 获取:api/SomeController
- 获取:api/SomeController/{id}
然而,当添加不太通用且更有意义的规则时
routes.MapHttpRoute(
name: "ApiSomeControllerDefault",
routeTemplate: "api/somecontroller/{id}",
defaults: new
{
controller = "SomeController",
id = RouteParameter.Optional
}
);
routes.MapHttpRoute(
name: "ApiDefault",
routeTemplate: "api/{controller}/{id}",
defaults: new
{
id = RouteParameter.Optional
}
);
Api Explorer 只返回
- 获取:api/somecontroller/{id}
是什么导致我的某些路线找不到?