CA2234: 문자열 대신 System.Uri 개체를 전달하십시오.

속성
규칙 ID CA2234
타이틀 문자열 대신 System.Uri 개체를 전달하세요.
범주 사용 현황
수정 사항이 주요 변경인지 여부 주요 변경 아님
.NET 8에서 기본적으로 사용 아니요

원인

이름에 “uri”, “Uri”, “urn”, “Urn”, “url” 또는 “Url”이 포함된 문자열 매개 변수가 있는 메서드를 호출합니다. 메서드의 선언 형식은 System.Uri 매개 변수가 있는 해당 메서드 오버로드를 포함합니다.

기본적으로 이 규칙은 외부에 표시되는 메서드와 형식만 확인하지만 이는 구성 가능합니다.

규칙 설명

매개 변수 이름은 카멜식 대/소문자 규칙에 따라 토큰으로 분할된 다음 각 토큰을 검사하여 “uri”, “Uri”, “urn”, “Urn”, “url” 또는 “Url”과 일치하는지를 확인합니다. 일치하는 항목이 있을 경우 매개 변수는 URI(Uniform Resource Identifier)를 나타내는 것으로 간주합니다. URI의 문자열 표현은 구문 분석 및 인코딩 오류를 발생시키기 쉬우며 보안 문제를 일으킬 수 있습니다. Uri 클래스는 해당 서비스를 안전한 방식으로 제공합니다. URI 표시와 관련하여 두 개의 다른 오버로드 중에서 선택하는 경우 사용자는 Uri 인수를 사용하는 오버로드를 선택해야 합니다.

위반 문제를 해결하는 방법

이 규칙의 위반 문제를 해결하려면 Uri 인수를 사용하는 오버로드를 호출합니다.

경고를 표시하지 않는 경우

문자열 매개 변수가 URI를 나타내지 않는 경우에는 이 규칙에서 경고를 표시하지 않아도 됩니다.

경고 표시 안 함

단일 위반만 표시하지 않으려면 원본 파일에 전처리기 지시문을 추가하여 규칙을 사용하지 않도록 설정한 후 다시 사용하도록 설정합니다.

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

파일, 폴더 또는 프로젝트에 대한 규칙을 사용하지 않도록 설정하려면 구성 파일에서 심각도를 none으로 설정합니다.

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

자세한 내용은 방법: 코드 분석 경고 표시 안 함을 참조하세요.

분석할 코드 구성

다음 옵션을 사용하여 이 규칙이 실행될 코드베이스 부분을 구성합니다.

이 규칙, 적용되는 모든 규칙 또는 적용되는 이 범주의 모든 규칙(사용)에 대해 이 옵션을 구성할 수 있습니다. 자세한 내용은 코드 품질 규칙 구성 옵션을 참조하세요.

특정 API 화면 포함

접근성을 기반으로 이 규칙을 실행할 코드베이스의 파트를 구성할 수 있습니다. 예를 들어 규칙이 퍼블릭이 아닌 API 표면에서만 실행되도록 지정하려면 프로젝트의 .editorconfig 파일에 다음 키-값 쌍을 추가합니다.

dotnet_code_quality.CAXXXX.api_surface = private, internal

예시

다음 예제에서는 규칙을 위반하는 ErrorProne 메서드와 Uri 오버로드를 올바르게 호출하는 SaferWay 메서드를 보여 줍니다.

Imports System

Namespace ca2234

    Class History

        Friend Sub AddToHistory(uriString As String)
        End Sub

        Friend Sub AddToHistory(uriType As Uri)
        End Sub

    End Class

    Public Class Browser

        Dim uriHistory As New History()

        Sub ErrorProne()
            uriHistory.AddToHistory("http://www.adventure-works.com")
        End Sub

        Sub SaferWay()
            Try
                Dim newUri As New Uri("http://www.adventure-works.com")
                uriHistory.AddToHistory(newUri)
            Catch uriException As UriFormatException
            End Try
        End Sub

    End Class

End Namespace
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) { }
    }
}