间歇性"无法加载类型'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'"错误

Bre*_*een 10 asp.net-web-api

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

间歇性地,我收到以下错误:

无法从程序集'System.Net.Http.Formatting,Version = 5.2.3.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'加载类型'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'.

源错误指向我的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);
Run Code Online (Sandbox Code Playgroud)

在我的注册表中,我正在执行以下操作以默认返回JSON:

var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes
                 .FirstOrDefault(t => t.MediaType == "application/xml");

if (appXmlType != null)
{
    config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
}
Run Code Online (Sandbox Code Playgroud)

(不确定来源,但在此网站的某处发现默认情况下返回JSON,除非调用者要求其他内容)

我想继续将JSON作为默认内容类型返回.

该项目包括另外两个(非WebAPI)网站(即MVC5),它们访问了WebAPI网站.

这是有趣的事情:

  • DOES NOT当应用程序部署(天青)发生
  • 这只会偶尔发生
  • 通常,我在调试器中运行一个MVC5站点并查看此问题
  • 如果我在上面之后直接导航到WebAPI网站,我会得到"黄色死亡屏幕",错误如上
  • 有时,即使在冷启动后,也不会出现此错误,有时则会出现此错误

我目前要解决的问题是:

  • 如果我在调试器中运行WebAPI站点,如果存在错误,它将自行修复
  • 在调试器中运行后(如上所述),我可以在调试器中重新启动MVC5站点,问题就消失了

只是重复,这DOES NOT发生,当应用程序部署到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>
Run Code Online (Sandbox Code Playgroud)

我检查了bin网站的文件夹,其中的所有程序集都有正确的版本,如上面的列表(包括System.Net.Http.Formatting.dll).

还要注意,在调试和开发过程中,三个网站中的每一个都在运行Local IIS(外部资源的限制迫使我们这样做),所以我有:

  • http://localhost/site1
  • http://localhost/site2
  • http://localhost/api

进入调试会话,获取此错误,然后停止调试,在调试器下启动API站点,然后切换回我在开始时所做的事情,变得很麻烦.

不知道还能去哪里追踪这里发生的事情.有任何想法吗?

更新 - 2016年7月26日

仍然有这种情况发生.自发布问题以来,已将WebAPI更新为在其自己的应用程序池中运行,但这似乎没有任何区别.

小智 2

卸载了 Web API 2 NuGet 包 再次安装了 Web API 2 NuGet 包。