Asp.net web api 断断续续;无法加载类型';System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'&引用;错误
我正在从事一个包含ASP.NET WebAPI组件的项目 间歇性地,我会出现以下错误: 无法加载类型 来自的“System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter” 程序集'System.Net.Http.Formatting,版本=5.2.3.0, 区域性=中性,PublicKeyToken=31bf3856ad364e35' 源错误指向我的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:
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站点,问题就会消失
- 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
这种情况仍然存在。发布问题后,我们更新了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