Asp.net web api 断断续续;无法加载类型';System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'&引用;错误

Asp.net web api 断断续续;无法加载类型';System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'&引用;错误,asp.net-web-api,Asp.net Web Api,我正在从事一个包含ASP.NET WebAPI组件的项目 间歇性地,我会出现以下错误: 无法加载类型 来自的“System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter” 程序集'System.Net.Http.Formatting,版本=5.2.3.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35' 源错误指向我的GlobalConfiguration.Configure()调用: Line 35:

我正在从事一个包含ASP.NET WebAPI组件的项目

间歇性地,我会出现以下错误:

无法加载类型 来自的“System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter” 程序集'System.Net.Http.Formatting,版本=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的一种方式,除非调用方要求其他内容)

我希望继续将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>

..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll
真的
我已经检查了网站的
bin
文件夹,其中所有程序集的版本都与上面的列表一致(包括System.Net.Http.Formatting.dll

还请注意,在调试和开发期间,三个网站中的每一个都是在本地IIS下运行的(外部资源的限制迫使我们这样做),因此我有:

  • http://localhost/site1
  • http://localhost/site2
  • http://localhost/api
进入调试会话,获取此错误,然后停止调试,在调试器下启动API站点,然后切换回开始时所做的事情,这变得越来越麻烦

不知道还能去哪里追踪这里发生的事情。有什么想法吗

更新-2016年7月26日


这种情况仍然存在。发布问题后,我们更新了WebAPI,使其在自己的应用程序池中运行,但这似乎没有什么不同。

卸载了WebAPI 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());

构建时,将查找任何有关冲突的警告。双击警告会在web.config部分注入兼容版本。这显然也可以手动完成。

我在全局程序集缓存(GAC)中添加了可能不正确的System.Net.Http.FORMATING版本,并开始

Could not load type 
'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' from assembly
'System.Net.Http.Formatting

我的Web服务中的错误。从GAC中删除这个System.Net.Http.FORMATING dll后,我的Web服务又开始工作了。

我将尝试一下,看看我找到了什么。我怀疑它能否解决这个问题,因为最近克隆了repo fresh的新开发人员也遇到了这个问题。请尝试设置
“复制到本地”
System.Net.Http.Formatting
referenceThanks for the comment-
Copy to local
is已被设置为
true
一段时间了,似乎没有什么区别。可能您的
bin
文件夹(部署时)包含一个
System.Net.Http.Formatting.dll
;删除它,将使用运行时
System.Net.Http.Formatting.dll
。@josejuan-我知道迟回复,但这是多次完成的,包括干净的版本和新的机器,问题总是会再次出现。虽然我做了此更改,但结果没有任何变化。
Could not load type 
'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' from assembly
'System.Net.Http.Formatting