解决 System.Web.Http 中的 CS0121

Zor*_*goZ 4 c# asp.net-web-api2

这段代码:

Request.CreateResponse(HttpStatusCode.PartialContent);
Run Code Online (Sandbox Code Playgroud)

产生以下编译错误:

错误 CS0121 调用在以下方法或属性之间不明确:“System.Net.Http.HttpRequestMessageExtensions.CreateResponse(System.Net.Http.HttpRequestMessage, System.Net.HttpStatusCode)”和“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两个程序集中都存在更糟糕的类。

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

Request.CreateResponse<object>(HttpStatusCode.PartialContent, null);
Run Code Online (Sandbox Code Playgroud)

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

[重现步骤]

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

Nin*_*rry 5

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

代替

myRequest.CreateResponse(HttpStatusCode.PartialContent);
Run Code Online (Sandbox Code Playgroud)

HttpRequestMessageExtensions.CreateResponse(myRequest, HttpStatusCode.PartialContent);
Run Code Online (Sandbox Code Playgroud)

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

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