在 System.Web.Http 中解决 CS0121

Resolve CS0121 in System.Web.Http

此代码:

Request.CreateResponse(HttpStatusCode.PartialContent);

产生以下编译错误:

Error CS0121 The call is ambiguous between the following methods or properties: 'System.Net.Http.HttpRequestMessageExtensions.CreateResponse(System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode)' and 'System.Web.Http.HttpRequestMessageCommonExtensions.CreateResponse(System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode)'

两者都在 System.Net.Http 命名空间中,一个在 System.Web.Http 汇编中,另一个在 System.Net.Http.Formatting 中,但我需要它们作为参考。更糟糕的是 System.Net.Http.HttpRequestMessageExtensions class 出现在两个程序集中。

作为一种解决方法,我可以使用这个重载,它似乎只存在于其中一个中:

Request.CreateResponse<object>(HttpStatusCode.PartialContent, null);

但是有没有其他方法可以解决冲突呢?

[重现步骤]

  1. 创建控制台应用程序
  2. 添加对 System.Net.Http
  3. 的引用
  4. 从 NuGet
  5. 添加对 System.Net.Http.Formatting 的引用
  6. 添加using System.Net.Http
  7. 添加var req = new HttpRequestMessage();
  8. 尝试添加 req.CreateResponse(HttpStatusCode.OK);
  9. 您应该会看到 12 个扩展方法重载。 有些是重复的,就是这些问题。

一般情况下,您可以直接使用扩展方法来解决此类歧义:

而不是

myRequest.CreateResponse(HttpStatusCode.PartialContent);

使用

HttpRequestMessageExtensions.CreateResponse(myRequest, HttpStatusCode.PartialContent);

在这种特定情况下,我无法按照您的说明重现该问题。但是,我已经下载了 Microsoft.AspNet.WebApi.Client Nuget instead of the System.Net.Http.Formatting Nuget,因为后者被标记为已弃用。也许尝试更新到较新的 Nuget?

更新:我可以在安装 System.Web.Http.Common Nuget 并将 using System.Web.Http; 添加到文件时重现该问题。如上所示使用对方法的显式调用可以解决问题。