Веб-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;
...
}