CA1057: 문자열 URI 오버로드는 System.Uri 오버로드를 호출합니다.

항목
RuleId CA1057
범주 Microsoft.Design
주요 변경 내용 주요 변경 아님

원인

형식이 문자열 매개 변수를 System.Uri 매개 변수로 바꾸는 것만 다른 메서드 오버로드를 선언하고, 문자열 매개 변수를 사용하는 오버로드가 Uri 매개 변수를 사용하는 오버로드를 호출하지 않습니다.

규칙 설명

오버로드가 문자열이나 Uri 매개 변수만 다르기 때문에 문자열은 URI(Uniform Resource Identifier)를 나타낸다고 가정됩니다. URI의 문자열 표현은 구문 분석 및 인코딩 오류를 발생시키기 쉬우며 보안 문제를 일으킬 수 있습니다. Uri 클래스는 해당 서비스를 안전한 방식으로 제공합니다. Uri 클래스의 이점을 활용하려면 문자열 오버로드에서 문자열 인수를 사용하여 Uri 오버로드를 호출해야 합니다.

위반 문제를 해결하는 방법

URI의 문자열 표현을 사용하는 메서드가 문자열 인수를 사용하여 Uri 클래스의 인스턴스를 만든 다음, Uri 매개 변수가 있는 오버로드에 Uri 개체를 전달하도록 메서드를 다시 구현합니다.

경고를 표시하지 않는 경우

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

예시

다음 예제에서는 올바르게 구현된 문자열 오버로드를 보여 줍니다.

using System;

namespace DesignLibrary
{
   public class History
   {
      public void AddToHistory(string uriString)
      {
          Uri newUri = new Uri(uriString);
          AddToHistory(newUri);
      }

      public void AddToHistory(Uri uriType) { }
   }
}

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

CA1056: URI 속성은 문자열이면 안 됩니다.

CA1054: URI 매개 변수는 문자열이면 안 됩니다.

CA1055: URI 반환 값은 문자열이면 안 됩니다.