Pat*_*ski 4 asp.net-mvc-routing asp.net-web-api asp.net-web-api-helppages
我正在我的Web API帮助页面中呈现重复条目,其中包含不同的父级,例如这些,引用相同的方法:
GET api/{apiVersion}/v1/Products - 获取所有产品
...
GET api/v1/Products - 获取所有产品
...
我有一个Web API页面,其中包含一些这样的路由:
config.Routes.MapHttpRoute (
name: "DefaultVersionApi",
routeTemplate: "api/{apiVersion}/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute (
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Run Code Online (Sandbox Code Playgroud)
我原以为这个路由会使"v1"成为可选项,所以上面的派生文档是不可取的.
(侧边栏:api/products肯定不行,所以我不确定这有什么问题.我错过了什么?)
看起来真正的问题是Web API帮助页面正在不正确地读取路由,正如我想的那样v1,{apiVersion} 不应该同时出现在同一个动作中. 我在这里错过了什么?
尝试使用属性路由,安装nuget包
Install-Package Microsoft.AspNet.WebApi.WebHost
Run Code Online (Sandbox Code Playgroud)
在WebApiConfig.cs中启用属性路由
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Attribute routing.
config.MapHttpAttributeRoutes();
// Convention-based routing.
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在Controller的方法中使用属性Route
[Route("~/api/v1/Products")]
[HttpGet]
public List<Product> Products()
{}
[Route("~/api/v2/Products")]
[HttpGet]
public List<Product> V2Products()
{}
Run Code Online (Sandbox Code Playgroud)
在您将获得的文档中
GET api/v1/Products - 获取所有产品
GET api/v2/Products - 获取所有产品
| 归档时间: |
|
| 查看次数: |
2355 次 |
| 最近记录: |