使用英语阅读

通过


CA2234:传递 System.Uri 对象,而不传递字符串

属性
规则 ID CA2234
标题 传递 System.Uri 对象,而不传递字符串
类别 使用情况
修复是中断修复还是非中断修复 非中断
在 .NET 9 中默认启用

原因

已调用具有字符串参数的方法,该字符串参数的名称包含 “uri”、“Uri”、“urn”、“url”或“Url”,而且该方法的声明类型包含一个具有 System.Uri 参数的相应方法重载。

默认情况下,此规则仅查看外部可见的方法和类型,但这是可配置的。

规则说明

参数名称根据 camel 大小写约定拆分为标记,然后此规则会检查每个标记是否为“uri”、“Uri”、“urn”、“Urn”、“url”或“Url”。 如果存在匹配项,则假定参数表示统一资源标识符 (URI)。 URI 的字符串表示形式容易导致分析和编码错误,并且可造成安全漏洞。 Uri 类以一种安全的方式提供这些服务。 如果在两个重载之间进行选择,而这两个重载只是在 URI 的表示形式方面存在差异,用户应选择采用 Uri 参数的重载。

如何解决冲突

若要解决此规则的冲突,请调用采用 Uri 参数的重载。

何时禁止显示警告

如果参数不表示 URI,可禁止显示此规则的警告。

抑制警告

如果只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用该规则。

C#
#pragma warning disable CA2234
// The code that's violating the rule is on this line.
#pragma warning restore CA2234

若要对文件、文件夹或项目禁用该规则,请在none中将其严重性设置为

ini
[*.{cs,vb}]
dotnet_diagnostic.CA2234.severity = none

有关详细信息,请参阅如何禁止显示代码分析警告

配置代码以进行分析

使用下面的选项来配置代码库的哪些部分要运行此规则。

可以仅为此规则、为适用的所有规则或为适用的此类别(使用情况)中的所有规则配置此选项。 有关详细信息,请参阅代码质量规则配置选项

包含特定的 API 图面

你可以通过设置 api_surface 选项来配置要基于可访问性对代码库的哪些部分运行此规则。 例如,若要指定规则应仅针对非公共 API 图面运行,请将以下键值对添加到项目中的 .editorconfig 文件:

ini
dotnet_code_quality.CAXXXX.api_surface = private, internal

备注

CAXXXXXXXX 部分替换为适用规则的 ID。

示例

下面的示例演示了与规则冲突的 ErrorProne 方法,以及正确调用 SaferWay 重载的 Uri 方法:

C#
class History
{
    internal void AddToHistory(string uriString) { }
    internal void AddToHistory(Uri uriType) { }
}

public class Browser
{
    History uriHistory = new History();

    public void ErrorProne()
    {
        uriHistory.AddToHistory("http://www.adventure-works.com");
    }

    public void SaferWay()
    {
        try
        {
            Uri newUri = new Uri("http://www.adventure-works.com");
            uriHistory.AddToHistory(newUri);
        }
        catch (UriFormatException) { }
    }
}