在System.Web.Http中解析CS0121

时间:2019-03-21 15:55:32

标签: c# asp.net-web-api2

此代码:

Request.CreateResponse(HttpStatusCode.PartialContent);

产生以下编译错误:

  

错误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);

但是还有其他解决冲突的方法吗?

[复制步骤]

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

1 个答案:

答案 0 :(得分:3)

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

代替

myRequest.CreateResponse(HttpStatusCode.PartialContent);

使用

HttpRequestMessageExtensions.CreateResponse(myRequest, HttpStatusCode.PartialContent);

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

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