Webapi方法发现异常get_MessageHandlers

Swa*_*gam 5 c# asp.net-web-api2

我在我的web api 2应用程序中添加了两个自定义消息处理程序,如下所示 https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/http-message-handlers

然后在Register方法中注册它们,

config.MessageHandlers.Add(new LogHandler());
config.MessageHandlers.Add(new HeaderHandler());
Run Code Online (Sandbox Code Playgroud)

启动时出现此错误:

Method not found: 'System.Collections.ObjectModel.Collection`1 
System.Web.Http.HttpConfiguration.get_MessageHandlers()'.
Run Code Online (Sandbox Code Playgroud)

use*_*716 9

我发现这个问题的根本原因是 .net 标准引用经常引入对不同版本包的引用,如 System.Net.Http 作为包的依赖项。

我在更新 StackExchange.Redis 时遇到了这个问题。它在本地运行良好,但是当部署到服务器时它会崩溃。

为了解决这个问题,我为 System.Net.Http 添加了一个绑定重定向

<dependentAssembly>
   <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" />
   <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

  • 很好 - 我们需要这个来解决系统被阻止并且无法重做引用的情况。所以支持你,我们欠你一杯啤酒。 (2认同)

Swa*_*gam 7

在搜索了几个小时后,我意识到这是因为添加了对.NET标准库项目的引用.

一旦我删除了另一个项目,这个错误消失了,应用程序运行正常.

另外需要注意的是,只有当我添加自己的消息处理程序并引用.Net标准库时,问题才会模拟.