Ответ 1
Удаленный пакет Web API 2 NuGet Обновлен пакет Web API 2 NuGet.
Я работаю над проектом, который включает компонент 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.
У меня есть несколько разработчиков, работающих над этим проектом, и мы все на какой-то стадии сталкиваемся с той же ошибкой.
Я ссылаюсь на следующие пакеты Nuget:
Если я заглянул внутрь файла *.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 для запуска в своем собственном пуле приложений, но это, похоже, не изменило ситуацию.
Удаленный пакет Web API 2 NuGet Обновлен пакет Web API 2 NuGet.
Я думаю, вы ошибетесь. Попробуйте установить JSON в качестве медиафайла по умолчанию, например:
// first clear all formatters
config.Formatters.Clear();
// Since JSON is the first added,
// it will be the "default" if no Accept header present
config.Formatters.Add(new JsonMediaTypeFormatter());
// You can choose not to add these back if you never want to use them,
// up to you.
config.Formatters.Add(new XmlMediaTypeFormatter());
config.Formatters.Add(new FormUrlEncodedMediaTypeFormatter());
Я добавил, что, возможно, некорректная версия System.Net.Http.Formatting для моего глобального сборочного кэша (GAC) и начала получать
Could not load type
'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' from assembly
'System.Net.Http.Formatting
в моем веб-сервисе. После удаления этой System.Net.Http.Formatting dll из GAC мой веб-сервис снова начал работать.
при построении ищет любое предупреждение о конфликте. Двойной щелчок по предупреждениям вводит совместимые версии в разделе web.config. Это, очевидно, также можно сделать вручную.