基于这篇博文http://codebetter.com/johnvpetersen/2012/08/01/documenting-your-asp-net-web-apis/我正在编写一个“文档控制器”,就像在上面的链接中所做的那样。但是当我进行以下调用时
GlobalConfiguration.Configuration.Services.GetApiExplorer().ApiDescriptions
我得到一个 InvalidOperationException ,声明:“在应用程序的预启动初始化阶段无法调用此方法。”。我看过ASP.NET: This method cannot be called during the application's pre-start initialization stage,但这并没有为我解决。我使用的是ASP.NET Web API 4.20710.0,这是NuGet的最新版本(是吗?)。
有人愿意在这个问题上给我一些帮助吗?是f.ex.可以在我调用ApiDescriptions之前强制预启动初始化阶段完成?或者它可能是另一种方式?
感谢您的任何意见!
修改
来自GET内的电话
public List<APIEndPoint> Get()
{
var controllers = GlobalConfiguration
.Configuration
.Services
.GetApiExplorer()
.ApiDescriptions;
...
}
以上链接提供了一个完整的示例。
答案 0 :(得分:5)
我意识到,在对System.Web.Http程序集进行复制之后,最可能的原因是ApiExplorer
的内部集合Lazy<Collection<ApiDescription>>
,由于我不知道的原因,未正确初始化或未设置为不可用状态,导致异常。我通过新建ApiExplorer
解决了这个问题。在我的ApiController
:
public List<APIEndPoint> Get()
{
var apiEx = new ApiExplorer(ControllerContext.Configuration);
var controllers = apiEx.ApiDescriptions;
...
}