Веб-API ASP.NET: вызов ApiDescription для бросков ApiExplorer: этот метод не может быть вызван на этапе предварительной инициализации приложения

На основе этого поста http://codebetter.com/johnvpetersen/2012/08/01/documenting-your-asp-net-web-apis/ я пишу "контроллер документации", почти так же, как это делается в ссылка выше. Однако, когда я делаю следующий звонок

GlobalConfiguration.Configuration.Services.GetApiExplorer().ApiDescriptions

Я получаю InvalidOperationException, заявляя: "Этот метод не может быть вызван во время предварительной инициализации приложения". Я взглянул на ASP.NET: этот метод не может быть вызван на этапе начальной инициализации приложения, но это не решило его для меня. Я использую ASP.NET Web API 4.20710.0, который является последним в соответствии с NuGet (да?).

Кто-нибудь хочет помочь мне с этим вопросом? Это к примеру Можно ли принудительно завершить этап предварительной инициализации, прежде чем я вызову ApiDescription? Или это может быть изменено по-другому?

Спасибо за любой вклад!

РЕДАКТИРОВАТЬ

Звонок сделан из GET

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

Приведенная выше ссылка предоставляет полный пример.

1 ответ

Решение

После распаковки сборки System.Web.Http я понял, что наиболее вероятной причиной этого была ApiExplorerвнутренняя коллекция Lazy<Collection<ApiDescription>> это было, по причинам, которые я не знаю, не было должным образом инициализировано или было установлено в состояние недоступности, вызывая исключение. Я решил проблему, обновив ApiExplorer, В моем ApiController:

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

    ...
} 
Другие вопросы по тегам