Я работаю над проектом, который включает компонент ASPAP WebAPI.
С перерывами я получаю следующую ошибку:
Не удалось загрузить тип 'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' из сборка 'System.Net.Http.Formatting, Version = 5.2.3.0, Культура = нейтральная, PublicKeyToken = 31bf3856ad364e35 '.
с исходной ошибкой, указывающей на мой вызов GlobalConfiguration.Configure()
:
Line 35: {
Line 36: AreaRegistration.RegisterAllAreas();
Line 37: GlobalConfiguration.Configure(WebApiConfig.Register); //<-- error here
Line 38: FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
Line 39: RouteConfig.RegisterRoutes(RouteTable.Routes);
В моем регистре я делаю следующее, чтобы вернуть JSON по умолчанию:
var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes
.FirstOrDefault(t => t.MediaType == "application/xml");
if (appXmlType != null)
{
config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
(не уверен в источнике, но нашел где-то на этом сайте как способ вернуть JSON по умолчанию, если вызывающий абонент не запрашивает что-то еще)
Я хотел бы продолжать возвращать JSON в качестве типа содержимого по умолчанию в будущем.
Проект включает в себя два других (не WebAPI) веб-сайта (MVC5), которые попали на сайт WebAPI.
Вот интересная вещь:
- Этот НЕ выполняется, когда приложение развертывается (до Azure)
- Это случается иногда
- Как правило, я запускаю один из сайтов MVC5 в отладчике и вижу эту проблему.
- Если я перейду непосредственно на сайт WebAPI после указанного выше, я получу "Желтый экран смерти" с ошибкой, как указано выше.
- Иногда, даже после холодной перезагрузки, эта ошибка НЕ появится, в других случаях она будет
Что я сейчас делаю для решения этой проблемы:
- Если я запустил сайт WebAPI в отладчике, если ошибка присутствует, он будет исправлен
- После запуска в отладчике (см. выше) я могу перезапустить сайт MVC5 в отладчике, и проблема исчезнет.
Просто, чтобы повторить, никогда не работает, когда приложение развертывается в Azure.
У меня есть несколько разработчиков, работающих над этим проектом, и мы все на какой-то стадии сталкиваемся с той же ошибкой.
Я ссылаюсь на следующие пакеты Nuget:
- Microsoft.AspNet.WebApi(версия 5.2.3)
- Microsoft.AspNet.WebApi.Client(версия 5.2.3)
- Microsoft.AspNet.WebApi.Core(версия 5.2.3)
- Microsoft.AspNet.WebApi.Owin(версия 5.2.2)
- Microsoft.AspNet.WebApi.WebHost(версия 5.2.3)
Если я заглянул внутрь файла *.csproj
, у меня есть ссылка на следующее:
<Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
<Private>True</Private>
</Reference>
Я проверил папку bin
на веб-сайте, и все сборки внутри нее имеют правильную версию в соответствии с приведенным выше списком (включая System.Net.Http.Formatting.dll)..
Также обратите внимание, что во время отладки и разработки каждый из трех веб-сайтов работает под Local IIS
(ограничения внешних ресурсов заставляют нас делать это), поэтому у меня есть:
-
http://localhost/site1
-
http://localhost/site2
-
http://localhost/api
Это становится громоздким, чтобы попасть в сеанс отладки, получить эту ошибку, а затем остановить отладку, запустить сайт API под отладчиком и затем вернуться к тому, что я делал в начале.
Не знаю, куда еще идти, чтобы отследить, что здесь происходит. Любые идеи?
Обновление - 26 июля 2016 г.
По-прежнему это происходит. После публикации вопроса обновили WebAPI для запуска в своем собственном пуле приложений, но это, похоже, не изменило ситуацию.