在 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);
但是有没有其他方法可以解决冲突呢?
[重现步骤]
- 创建控制台应用程序
- 添加对
System.Net.Http
的引用
- 从 NuGet
添加对 System.Net.Http.Formatting
的引用
- 添加
using System.Net.Http
- 添加
var req = new HttpRequestMessage();
- 尝试添加
req.CreateResponse(HttpStatusCode.OK);
- 您应该会看到 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;
添加到文件时重现该问题。如上所示使用对方法的显式调用可以解决问题。
此代码:
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);
但是有没有其他方法可以解决冲突呢?
[重现步骤]
- 创建控制台应用程序
- 添加对
System.Net.Http
的引用
- 从 NuGet 添加对
- 添加
using System.Net.Http
- 添加
var req = new HttpRequestMessage();
- 尝试添加
req.CreateResponse(HttpStatusCode.OK);
- 您应该会看到 12 个扩展方法重载。 有些是重复的,就是这些问题。
System.Net.Http.Formatting
的引用
一般情况下,您可以直接使用扩展方法来解决此类歧义:
而不是
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;
添加到文件时重现该问题。如上所示使用对方法的显式调用可以解决问题。