【发布时间】:2014-04-09 00:06:49
【问题描述】:
我已经在我的 WebAPI 应用程序中实现了一个版本控制框架,并且非常希望让它与 Microsoft 的新帮助页面扩展程序一起使用。
Microsoft.AspNet.WebApi.HelpPage
很简单,我不知道如何让它们一起工作。我有 2 个项目:
- AdventureWorks.Api(主主机/根应用程序)
- AdventureWorks.Api.v1(包含 API 第一版的类库)
版本控制按预期工作。
我尝试在根应用程序上安装 HelpPage 包,当我浏览到帮助页面时,似乎没有找到任何控制器。在内部我相信它使用:
Configuration.Services.GetApiExplorer().ApiDescriptions
这不返回任何结果,所以我得到一个错误。
谁能帮助我让这两个包一起工作?
编辑: 一开始,我不确定这是一个路由问题,但最近的 cmets 似乎另有建议。这是我的 RouteConfig.cs
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapHttpRoute(
name: "SldExportAliasApi",
routeTemplate: "api/v{version}/sld-export/{id}",
defaults: new { id = RouteParameter.Optional, controller = "Export" }
);
routes.MapHttpRoute(
name: "LinkRoute",
routeTemplate: "api/v{version}/link/{system}/{deployment}/{view}",
defaults: new { controller = "Link" }
);
routes.MapHttpRoute(
name: "DefaultSubParameterApi",
routeTemplate: "api/v{version}/{controller}/{id}/{param}",
defaults: new { id = RouteParameter.Optional, param = RouteParameter.Optional }
);
routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/v{version}/{controller}/{action}/{id}",
defaults: new { action = "Index", id = RouteParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
【问题讨论】:
-
由于找不到我要查找的 API,它自然会返回 404,即 /help/myapi 尝试查找名为“myapi”的控制器。由于 ApiExplorer 不包含这样的控制器,因此会出错。
-
使用默认的 HelpPage 安装,您将无法请求“/help/myapi”,因为帮助页面注册的路由如下所示,而且这里的帮助是一个 MVC 控制器......我我错过了什么?: context.MapRoute( "HelpPage_Default", "Help/{action}/{apiId}", new { controller = "Help", action = "Index", apiId = UrlParameter.Optional });
-
实际路由如下所示:'/help/api/{mycontrollername}' 注册在路由中。问题是当 HelpPage 扩展程序试图找到一个名为“{mycontrollername}”的控制器时却找不到。
-
你能发布你的完整路线配置吗?
-
愚蠢的问题,您的入口点是名为 GetWhatever 还是 PostWhatever,等等。或者至少用HttpPost/HttpGet等装饰?
标签: c# asp.net-mvc asp.net-web-api