调用在以下方法或属性之间是不明确的——重载字符串和byte[]输入

本文关键字:字符串 重载 byte 输入 不明确 方法 之间 属性 调用 | 更新日期: 2023-09-27 18:13:17

由于我在谷歌上找不到任何具体的内容,所以我添加了这个给后人。

问题:

调用在以下方法或属性之间是不明确的:'System.Web.HttpUtility.UrlEncode(string)'和'System.Web.HttpUtility.UrlEncode(byte[])'

注意:这个问题至少是特定于在一个签名中接受字符串而在类似签名中接受字节[]的重载方法(参见上面的UrlEncode签名)。

这个问题在使用ASP的部分中表现为RuntimeBinderException。NET MVC4,但它可能发生在其他环境中。关键是UrlEncode有两个重载,运行时绑定器无法确定使用哪个重载。

调用在以下方法或属性之间是不明确的——重载字符串和byte[]输入

我的解决方案:

虽然不是最优的,但将输入转换为正确的类型似乎给了运行时绑定足够的提示,它可以解析要使用的正确方法签名。

例如,这里有一些抛出上述异常的"失败"代码(来自MVC4部分-代码来自承包商,我并不是说这是创建锚标记的最佳方式-但它确实很好地说明了特定问题):
<a rel="nofollow"
   href="https://twitter.com/share?text=Check%20this%20out!%20@(ViewBag.Title)%20
   @(HttpUtility.UrlEncode(Request.Url.AbsoluteUri))%20%40codinghorror"
   target="_blank">
  twitter
</a>

在这里,稍微改写了一下:

<a rel="nofollow"
   href="https://twitter.com/share?text=Check%20this%20out!%20@(ViewBag.Title)%20
   @(HttpUtility.UrlEncode((string)Request.Url.AbsoluteUri))%20%40codinghorror"
   target="_blank">
  twitter
</a>

修复后,我重新加载了有问题的页面,果然,噗!

轨迹快乐!