CA1055:URI 戻り値を文字列にすることはできません
プロパティ | 値 |
---|---|
ルール ID | CA1055 |
Title | URI 戻り値を文字列にすることはできません |
[カテゴリ] | デザイン |
修正が中断ありか中断なしか | あり |
.NET 9 では既定で有効 | いいえ |
あるメソッドの名前に "uri"、"Uri"、"urn"、"Urn"、"url"、または "Url" が含まれ、このメソッドによって文字列が返されます。
既定では、この規則の対象は外部から参照可能なメンバーのみですが、これは構成可能です。
この規則によって、Pascal 形式の表記規則に基づきメソッド名がトークンに分割され、各トークンが "uri"、"Uri"、"urn"、"Urn"、"url"、または "Url" に等しいかどうかが確認されます。 一致がある場合、この規則では、メソッドから URI (Uniform Resource Identifier) が返されると想定されます。 URI の文字列表現は解析エラーやエンコーディング エラーが発生しやすく、セキュリティ上の脆弱性の原因となる場合があります。 System.Uri クラスを使用すると、安全な方法でこのサービスを実現できます。
この規則違反を修正するには、戻り値の型を Uri に変更します。
戻り値の型が URI を表さない場合、この規則からの警告を非表示にしても問題ありません。
単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。
#pragma warning disable CA1055
// The code that's violating the rule is on this line.
#pragma warning restore CA1055
ファイル、フォルダー、またはプロジェクトの規則を無効にするには、none
でその重要度を に設定します。
[*.{cs,vb}]
dotnet_diagnostic.CA1055.severity = none
詳細については、「コード分析の警告を抑制する方法」を参照してください。
次のオプションを使用して、コードベースのどの部分に対してこの規則を実行するかを構成します。
これらのオプションは、このルールのみ、適用されるすべてのルール、または適用先のこのカテゴリ (デザイン) のすべてのルールに対して構成できます。 詳細については、「コード品質規則の構成オプション」を参照してください。
api_surface オプションを設定することで、アクセスの可否に基づいてこのルールを実行するコードベースの部分を構成できます。 たとえば、非パブリック API サーフェイスでのみ規則を実行するように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。
dotnet_code_quality.CAXXXX.api_surface = private, internal
注意
CAXXXX
の XXXX
部分を該当するルールの ID に置き換えます。
excluded_symbol_names オプションを設定することで、種類やメソッドなどの特定のシンボルを分析から除外できます。 たとえば、MyType
という名前の型のコードで規則を実行しないように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
注意
CAXXXX
の XXXX
部分を該当するルールの ID に置き換えます。
オプションの値で使用できるシンボル名の形式 (|
で区切ります):
- シンボル名のみ (包含する型または名前空間に関係なく、その名前が指定されたすべてのシンボルが含まれます)。
- そのシンボルのドキュメント ID 形式の完全修飾名。 各シンボル名には、メソッドには
M:
、型にはT:
、名前空間にはN:
のように、シンボルの種類のプレフィックスが必要です。 - コンストラクターには
.ctor
、静的コンストラクターには.cctor
。
例 :
オプション値 | まとめ |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
MyType という名前のすべてのシンボルを検索します。 |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
MyType1 または MyType2 という名前のすべてのシンボルを検索します。 |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
指定された完全修飾シグネチャを持つ特定のメソッド MyMethod を検索します。 |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
それぞれの完全修飾シグネチャを持つ特定のメソッド MyMethod1 または MyMethod2 を検索します。 |
excluded_type_names_with_derived_types オプションを設定することで、特定の型とその派生型を分析から除外できます。 たとえば、MyType
という名前の型のメソッドとその派生型で規則を実行しないように指定するには、プロジェクトの .editorconfig ファイルに次のキーと値のペアを追加します。
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
注意
CAXXXX
の XXXX
部分を該当するルールの ID に置き換えます。
オプションの値で使用できるシンボル名の形式 (|
で区切ります):
- 型の名前のみ (包含する型または名前空間に関係なく、その名前が指定されたすべての型が含まれます)。
- そのシンボルのドキュメント ID 形式の完全修飾名 (オプションで
T:
プレフィックスも使用可)。
例 :
オプション値 | まとめ |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
MyType という名前のすべての型と、そのすべての派生型を検索します。 |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
MyType1 または MyType2 という名前のすべての型と、そのすべての派生型を検索します。 |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
指定された完全修飾名を持つ特定の型 MyType と、そのすべての派生型を検索します。 |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
それぞれの完全修飾名を持つ特定の型 MyType1 または MyType2 と、そのすべての派生型を検索します。 |
次の例では、この規則に違反する型 ErrorProne
と、この規則に準拠する型 SaferWay
を確認できます。
public class ErrorProne
{
// Violates rule UriPropertiesShouldNotBeStrings.
public string? SomeUri { get; set; }
// Violates rule UriParametersShouldNotBeStrings.
public void AddToHistory(string uriString) { }
// Violates rule UriReturnValuesShouldNotBeStrings.
public string GetReferrerUri(string httpHeader)
{
return "http://www.adventure-works.com";
}
}
public class SaferWay
{
// To retrieve a string, call SomeUri.ToString().
// To set using a string, call SomeUri = new Uri(string).
public Uri? SomeUri { get; set; }
public void AddToHistory(string uriString)
{
// Check for UriFormatException.
AddToHistory(new Uri(uriString));
}
public void AddToHistory(Uri uriType) { }
public Uri GetReferrerUri(string httpHeader)
{
return new Uri("http://www.adventure-works.com");
}
}
Imports System
Namespace ca1055
Public Class ErrorProne
' Violates rule UriPropertiesShouldNotBeStrings.
Property SomeUri As String
' Violates rule UriParametersShouldNotBeStrings.
Sub AddToHistory(uriString As String)
End Sub
' Violates rule UriReturnValuesShouldNotBeStrings.
Function GetRefererUri(httpHeader As String) As String
Return "http://www.adventure-works.com"
End Function
End Class
Public Class SaferWay
' To retrieve a string, call SomeUri.ToString().
' To set using a string, call SomeUri = New Uri(string).
Property SomeUri As Uri
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("http://www.adventure-works.com")
End Function
End Class
End Namespace
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。