CA1057: 문자열 URI 오버로드는 System.Uri 오버로드를 호출합니다.
TypeName |
StringUriOverloadsCallSystemUriOverloads |
CheckId |
CA1057 |
범주 |
Microsoft.Design |
변경 수준 |
주요 변경 아님 |
원인
형식이 문자열 매개 변수를 System.Uri 매개 변수로만 바꾸어서 다른 메서드 오버로드를 선언하고, 문자열 매개 변수를 사용하는 오버로드가 Uri 매개 변수를 사용하는 오버로드를 호출하지 않습니다.
규칙 설명
오버로드가 문자열/Uri 매개 변수만 다르므로 문자열이 URI(Uniform Resource Identifier)를 나타내는 것으로 간주됩니다. URI의 문자열 표현은 구문 분석 및 인코딩 오류를 발생시키기 쉬우며 보안 문제를 일으킬 수 있습니다. Uri 클래스는 이러한 서비스를 안전한 방식으로 제공합니다. Uri 클래스의 이점을 활용하려면 문자열 오버로드가 문자열 인수를 사용하여 Uri 오버로드를 호출해야 합니다.
위반 문제를 해결하는 방법
문자열 인수를 사용하여 Uri 클래스의 인스턴스를 만들도록 URI의 문자열 표현을 사용하는 메서드를 다시 구현한 다음 Uri 매개 변수가 있는 오버로드에 Uri 개체를 전달합니다.
경고를 표시하지 않는 경우
문자열 매개 변수가 URI를 나타내지 않을 경우에는 이 규칙에서 경고를 표시하지 않아도 안전합니다.
예제
다음 예제에서는 올바르게 구현된 문자열 오버로드를 보여 줍니다.
Imports System
Namespace DesignLibrary
Public Class History
Sub AddToHistory(uriString As String)
Dim newUri As New Uri(uriString)
AddToHistory(newUri)
End Sub
Sub AddToHistory(uriType As Uri)
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class History
{
public void AddToHistory(string uriString)
{
Uri newUri = new Uri(uriString);
AddToHistory(newUri);
}
public void AddToHistory(Uri uriType) { }
}
}
#using <system.dll>
using namespace System;
namespace DesignLibrary
{
public ref class History
{
public:
void AddToHistory(String^ uriString)
{
Uri^ newUri = gcnew Uri(uriString);
AddToHistory(newUri);
}
void AddToHistory(Uri^ uriType) { }
};
}
관련 규칙
CA2234: 문자열 대신 System.Uri 개체를 전달하십시오.