我有一个预先存在的MVC应用程序,我使用Nuget添加了Web API和Web API自我文档。虽然Web API控制器运行正常(返回对HTTP请求的有效响应),但帮助控制器未找到任何要记录的Web API方法。
在帮助控制器索引操作“Configuration.Services.GetApiExplorer()。ApiDescriptions”中返回0结果。
什么填充了ApiDescriptions,是否需要设置任何配置设置以将我的api公开给文档?
“帮助区域”是与我的其他应用程序不同的区域。这是否导致找到控制器的部件找不到我的控制器?此外,我甚至添加了一个帮助剪切到HelpController本身,这仍然没有导致API描述。
我的API控制器也有特殊的路由,所以我不确定这是否相关。
答案 0 :(得分:7)
经过一些搜索,我发现this post也提到this post
如第一篇文章所述,Glimpse就是罪魁祸首,这个解决方案为我解决了这个问题:
<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd">
<inspectors>
<ignoredTypes>
<add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet"/>
</ignoredTypes>
</inspectors>
</glimpse>
这也是一个已知问题,解决方法在此Glimpse GitHub Issue上进行了描述。
答案 1 :(得分:3)
我有同样的问题,我没有使用Glimpse,我解决了这样的问题:
在ProjectName\Areas\HelpPage\Controllers\HelpController.cs
文件注释构造函数因为未调用隐式构造函数public HelpController() : this(GlobalConfiguration.Configuration)
默认调用带有参数public HelpController(HttpConfiguration config)
的构造函数,并初始化Configuration
属性是incorect。你可以这样解决这个问题:
解决方案1: 注释/删除构造函数。
public class HelpController : Controller
{
private const string ErrorViewName = "Error";
// public HelpController()
// : this(GlobalConfiguration.Configuration)
// {
// }
// public HelpController(HttpConfiguration config)
// {
// Configuration = config;
// }
/// <summary>
/// GlobalConfiguration By default
/// </summary>
protected static HttpConfiguration Configuration
{
get { return GlobalConfiguration.Configuration; }
}
public ActionResult Index()
{
ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider();
return View(Configuration.Services.GetApiExplorer().ApiDescriptions);
}
....
解决方案2: 通过添加此属性[InjectionConstructor]来注入默认构造函数。
public class HelpController : Controller
{
private const string ErrorViewName = "Error";
[InjectionConstructor]
public HelpController()
: this(GlobalConfiguration.Configuration)
{
}
public HelpController(HttpConfiguration config)
{
Configuration = config;
}
/// <summary>
/// GlobalConfiguration By default
/// </summary>
protected static HttpConfiguration Configuration { get; private set; }
....
问题解决了。
答案 2 :(得分:2)
我可以通过在GlobalConfiguration.Configure (WebApiConfig.Register);
方法中添加Application_Start ()
来解决此问题。因为我的应用程序使用OWIN,所以我只在Startup.Configuration (IAppBuilder app)
注册了我的API。
答案 3 :(得分:0)
从NuGet package manager
安装HelpPages包后 - 导航至WebApplication1\Areas\HelpPage\App_Start\HelpPageConfig.cs
并取消注释下面的行
config.SetDocumentationProvider(new XmlDocumentationProvider(
HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml")));
同时将App_Data/XmlDocument.xml
添加到WebApplication&gt;属性&gt;构建&gt;检查XML文档文件