我正在我的Web API Help Page中使用不同的父母(例如这些)引用重复的条目来引用相同的方法:
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 }
);
我原以为这个路由会使“v1”成为可选项,所以上面的派生文档是不可取的。
(侧边栏:转到api/products
肯定不起作用,所以我不确定这有什么问题。我错过了什么?)
似乎真正的问题是Web API帮助页面正在不正确地阅读路由,因为我认为v1
和{apiVersion}
不应同时出现在同一个操作中。 我在这里缺少什么?
答案 0 :(得分:6)
尝试使用属性路由,安装nuget包
Install-Package Microsoft.AspNet.WebApi.WebHost
在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 }
);
}
}
然后在Controller的方法中使用属性Route
[Route("~/api/v1/Products")]
[HttpGet]
public List<Product> Products()
{}
[Route("~/api/v2/Products")]
[HttpGet]
public List<Product> V2Products()
{}
您将获得的文档中的
GET api / v1 / Products - 获取所有产品
GET api / v2 / Products - 获取所有产品
答案 1 :(得分:2)
这似乎是ASP.NET Web API帮助页面的缺点。为了解决此问题,我更改了视图以从呈现的文档中排除这些无效路由。对于上面的示例,我将此Where子句添加到 ApiGroup.cshtml 中的循环中,更改
@foreach (var api in Model){
到
@foreach (var api in Model.Where(m => !m.Route.RouteTemplate.Contains(@"{apiVersion}"))){