ASP.NET Web API:在ApiExplorer上调用ApiDescriptions抛出:在应用程序的启动前初始化阶段无法调用此方法

And*_*eas 3 asp.net asp.net-mvc asp.net-web-api asp.net-mvc-apiexplorer

基于这篇博文http://codebetter.com/johnvpetersen/2012/08/01/documenting-your-asp-net-web-apis/我正在编写一个"文档控制器",就像它在以上链接.但是当我拨打以下电话时

GlobalConfiguration.Configuration.Services.GetApiExplorer().ApiDescriptions
Run Code Online (Sandbox Code Playgroud)

我得到一个InvalidOperationException,指出:" 在应用程序的预启动初始化阶段,无法调用此方法. " 我已经看过ASP.NET:在应用程序的启动前初始化阶段不能调用此方法,但这并没有为我解决.我在ASP.NET Web API 4.20710.0上,根据NuGet是最新的(是吗?).

有人愿意在这个问题上给我一些帮助吗?是f.ex. 可以在我调用ApiDescriptions之前强制预启动初始化阶段完成?或者它可能是另一种方式?

感谢您的任何意见!

编辑

呼叫是在GET内进行的

public List<APIEndPoint> Get()
{
  var controllers = GlobalConfiguration
    .Configuration
    .Services
    .GetApiExplorer()
    .ApiDescriptions; 
  ... 
}
Run Code Online (Sandbox Code Playgroud)

上面的链接提供了一个完整的例子.

And*_*eas 5

我意识到,在对System.Web.Http程序集进行复制之后,最可能的原因是ApiExplorer内部集合Lazy<Collection<ApiDescription>>由于我不知道的原因而未正确初始化或已设置为不可用状态,导致异常.我通过新手来解决这个问题ApiExplorer.在我的ApiController:

public List<APIEndPoint> Get()
{
    var apiEx = new ApiExplorer(ControllerContext.Configuration);
    var controllers = apiEx.ApiDescriptions;

    ...
} 
Run Code Online (Sandbox Code Playgroud)