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

时间:2012-09-06 11:08:43

标签: 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

我得到一个 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; 
  ... 
}

以上链接提供了一个完整的示例。

1 个答案:

答案 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;

    ...
}