【发布时间】:2016-01-25 21:11:53
【问题描述】:
我正在开发一个包含 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:
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)时发生
- 这只是偶尔发生
- 通常,我在调试器中运行一个 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>
我检查了网站的bin 文件夹,里面的所有程序集都有上面列表中的正确版本(包括System.Net.Http.Formatting.dll) .
还要注意,在调试和开发过程中,三个网站都在Local IIS下运行(外部资源的限制迫使我们这样做),所以我有:
http://localhost/site1http://localhost/site2http://localhost/api
进入调试会话,得到这个错误,然后停止调试,在调试器下启动 API 站点,然后切换回我在开始时所做的事情变得很麻烦。
不知道还能去哪里追踪这里发生的事情。有什么想法吗?
更新 - 2016 年 7 月 26 日
仍然有这种情况发生。自发布问题以来,已更新 WebAPI 以在其自己的应用程序池中运行,但这似乎没有什么不同。
【问题讨论】:
-
尝试将
"Copy to local"设置为 true 以获取System.Net.Http.Formatting参考 -
感谢您的评论 -
Copy to local已设置为true有一段时间了 - 似乎没有什么不同。 -
可能您的
bin文件夹(部署时)包含一个System.Net.Http.Formatting.dll;删除它,运行时System.Net.Http.Formatting.dll将被使用。 -
@josejuan - 我知道回复晚了,但这是多次完成的,包括干净的构建和新的机器,问题总是会回来。
标签: asp.net-web-api