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
System.Net.Http.Formatting
的引用
var req=new-HttpRequestMessage()代码>
req.CreateResponse(HttpStatusCode.OK)代码>
通常,您可以直接使用扩展方法来解决此类歧义: 而不是
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);