Share via


CA1057: 文字列 URI オーバーロードが、System.Uri オーバーロードを呼び出します

Item [値]
規則 ID CA1057
カテゴリ Microsoft.Design
互換性に影響する変更点 なし

原因

文字列パラメーターが System.Uri パラメーターに置き換えられている点だけが異なるメソッド オーバーロードが型で宣言されています。また、文字列パラメーターを使用するオーバーロードは、Uri パラメーターを使用するオーバーロードを呼び出しません。

規則の説明

オーバーロードは文字列または Uri パラメーターのみが異なるため、文字列は Uniform Resource Identifier (URI) を表すと見なされます。 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 戻り値を文字列にすることはできません