间歇地,我得到以下错误:
Could not load type
‘System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter’ from
assembly ‘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时,不会发生这种情况
>这只会偶尔发生
>通常,我在调试器中运行一个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)
<Reference Include="System.Net.Http.Formatting,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).
另请注意,在调试和开发过程中,三个网站中的每一个都在本地IIS下运行(外部资源的约束迫使我们这样做),所以我有:
> http:// localhost / site1
> http:// localhost / site2
> http:// localhost / api
进入调试会话变得麻烦,要得到这个错误,然后停止调试,在调试器下启动API站点,然后切换回我在开始时所做的工作.
不知道在哪里去跟踪这里发生了什么.有任何想法吗?
更新 – 2016年7月26日
仍然有这种情况发生.自从发布问题以来,已经更新了WebAPI以在自己的应用程序池中运行,但这似乎没有什么不同.