我正在开发一个包含ASP.NET WebAPI组件的项目。
间歇性地,我收到以下错误:
无法加载类型 'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter'来自 程序集'System.Net.Http.Formatting,Version = 5.2.3.0, Culture = neutral,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站点,然后切换回我在开始时所做的事情,这变得很麻烦。
不知道还能去哪里追踪这里发生的事情。有什么想法吗?
更新 - 2016年7月26日
仍然有这种情况发生。自发布问题以来,已将WebAPI更新为在自己的应用程序池中运行,但这似乎没有什么区别。
答案 0 :(得分:2)
卸载了Web API 2 NuGet包 再次安装Web API 2 NuGet包。
答案 1 :(得分:1)
我认为你错了。尝试将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());
答案 2 :(得分:0)
我已将可能不正确版本的System.Net.Http.Formatting添加到我的全局程序集缓存(GAC)并开始获取
Could not load type
'System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter' from assembly
'System.Net.Http.Formatting
我的Webservice中的错误。从GAC中删除此System.Net.Http.Formatting dll后,我的webservice又开始工作了。
答案 3 :(得分:-1)
当你构建查找任何谈论冲突的警告时。双击警告会在web.config部分中注入兼容版本。这显然也可以手动完成。