C# 在System.Web.Http中解析CS0121

C# 在System.Web.Http中解析CS0121,c#,asp.net-web-api2,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.HttpReques

此代码:

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
assembly中,另一个在
System.Net.Http.Formatting
中,但我需要它们作为参考。更糟糕的是,两个程序集中都存在
System.Net.Http.HttpRequestMessageExtensions

作为一种解决方法,我可以使用这个重载,它似乎只有一个:

Request.CreateResponse<object>(HttpStatusCode.PartialContent, null);
Request.CreateResponse(HttpStatusCode.PartialContent,null);
但还有其他解决冲突的方法吗

[复制步骤]

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

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

    而不是

    myRequest.CreateResponse(HttpStatusCode.PartialContent);
    
    使用


    在这种特殊情况下,我无法按照您的指示再现该问题。但是,我下载了,而不是,因为后者被标记为已弃用。也许尝试更新到较新的Nuget


    更新:我可以在安装和使用System.Web.Http添加
    时重现该问题到该文件。使用如上所示的方法的显式调用解决了这个问题。

    VS可以轻松地处理这个问题,正如我所说的那样know@demo看来不行。无论如何,解决方案不应该依赖于IDE,而应该是纯代码或配置。您可以完全限定一个类来解决冲突,但是对于从任何无人参与的使用过的命名空间导入的扩展方法,您可以做什么呢?如果它说它不明确,那么您只需要弄清楚。使用您想要使用的名称空间的完整名称空间。@Archer请举例说明在使用扩展方法时如何执行此操作。您能否给出一个示例,以便我们可以复制/粘贴并再现此问题?为了使其更具挑战性,显式调用给出:
    CS0433类型“HttpRequestMessageExtensions”存在于“System.Net.Http.Formatting,Version=5.2.7.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'和'System.Web.Http,Version=5.2.7.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35'
    。不幸的是,我无法摆脱
    System.Net.Http.Formatting
    ,因为它也带有依赖性。但是看起来还是很有希望的。但是它的工作原理正好相反:
    HttpRequestMessageCommonExtensions.CreateResponse
    是明确的。我以前也采用过这种方法,但我认为还有更好的方法。谢谢你确认没有。
    HttpRequestMessageExtensions.CreateResponse(myRequest, HttpStatusCode.PartialContent);