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 オブジェクトを渡します

CA1056: URI プロパティを文字列にすることはできません

CA1054: URI パラメーターを文字列にすることはできません

CA1055: URI 戻り値を文字列にすることはできません