CA1054: URI パラメーターを文字列にすることはできません
TypeName |
UriParametersShouldNotBeStrings |
CheckId |
CA1054 |
カテゴリ |
Microsoft.Design |
互換性に影響する変更点 |
あり |
原因
型で、"uri"、"Uri"、"urn"、"Urn"、"url"、または "Url" という文字列パラメーターを持つメソッドを宣言しています。また、その型では、System.Uri パラメーターを使用する、対応するオーバーロードを宣言していません。
規則の説明
この規則では、パラメーター名は Camel 形式の大文字と小文字の表記規則に基づいて、トークンに分割されます。次に、各トークンは、"uri"、"Uri"、"urn"、"Urn"、"url"、または "Url" と一致するかどうかがチェックされます。 一致する場合、規則では、パラメーターは URI (Uniform Resource Identifier) を表すと想定されます。 URI の文字列表現は解析エラーやエンコーディング エラーが発生しやすく、セキュリティ上の脆弱性の原因となる場合があります。 メソッドで URI の文字列形式を使用する場合、対応するオーバーロードを宣言し、Uri クラスのインスタンスを使用します。こうすることで、安全な方法でこのサービスを実現できます。
違反の修正方法
この規則違反を修正するには、パラメーターを Uri 型に変更します。これは互換性に影響のある変更です。 代替案として、Uri パラメーターを使用するメソッドのオーバーロードを宣言する方法もあります。これは互換性に影響がありません。
警告を抑制する状況
パラメーターが URI を表さない場合は、この規則による警告を抑制しても安全です。
使用例
この規則に違反している型 ErrorProne と、規則に適合する型 SaferWay を次の例に示します。
Imports System
Namespace DesignLibrary
Public Class ErrorProne
Dim someUriValue As String
' Violates rule UriPropertiesShouldNotBeStrings.
Property SomeUri As String
Get
Return someUriValue
End Get
Set
someUriValue = Value
End Set
End Property
' Violates rule UriParametersShouldNotBeStrings.
Sub AddToHistory(uriString As String)
End Sub
' Violates rule UriReturnValuesShouldNotBeStrings.
Function GetRefererUri(httpHeader As String) As String
Return "https://www.adventure-works.com"
End Function
End Class
Public Class SaferWay
Dim someUriValue As Uri
' To retrieve a string, call SomeUri.ToString().
' To set using a string, call SomeUri = New Uri(string).
Property SomeUri As Uri
Get
Return someUriValue
End Get
Set
someUriValue = Value
End Set
End Property
Sub AddToHistory(uriString As String)
' Check for UriFormatException.
AddToHistory(New Uri(uriString))
End Sub
Sub AddToHistory(uriString As Uri)
End Sub
Function GetRefererUri(httpHeader As String) As Uri
Return New Uri("https://www.adventure-works.com")
End Function
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class ErrorProne
{
string someUri;
// Violates rule UriPropertiesShouldNotBeStrings.
public string SomeUri
{
get { return someUri; }
set { someUri = value; }
}
// Violates rule UriParametersShouldNotBeStrings.
public void AddToHistory(string uriString) { }
// Violates rule UriReturnValuesShouldNotBeStrings.
public string GetRefererUri(string httpHeader)
{
return "https://www.adventure-works.com";
}
}
public class SaferWay
{
Uri someUri;
// To retrieve a string, call SomeUri.ToString().
// To set using a string, call SomeUri = new Uri(string).
public Uri SomeUri
{
get { return someUri; }
set { someUri = value; }
}
public void AddToHistory(string uriString)
{
// Check for UriFormatException.
AddToHistory(new Uri(uriString));
}
public void AddToHistory(Uri uriType) { }
public Uri GetRefererUri(string httpHeader)
{
return new Uri("https://www.adventure-works.com");
}
}
}
#using <system.dll>
using namespace System;
namespace DesignLibrary
{
public ref class ErrorProne
{
public:
// Violates rule UriPropertiesShouldNotBeStrings.
property String^ SomeUri;
// Violates rule UriParametersShouldNotBeStrings.
void AddToHistory(String^ uriString) { }
// Violates rule UriReturnValuesShouldNotBeStrings.
String^ GetRefererUri(String^ httpHeader)
{
return "https://www.adventure-works.com";
}
};
public ref class SaferWay
{
public:
// To retrieve a string, call SomeUri()->ToString().
// To set using a string, call SomeUri(gcnew Uri(string)).
property Uri^ SomeUri;
void AddToHistory(String^ uriString)
{
// Check for UriFormatException.
AddToHistory(gcnew Uri(uriString));
}
void AddToHistory(Uri^ uriType) { }
Uri^ GetRefererUri(String^ httpHeader)
{
return gcnew Uri("https://www.adventure-works.com");
}
};
}
関連規則
CA1056: URI プロパティを文字列にすることはできません
CA1055: URI 戻り値を文字列にすることはできません