Partager via


CA1057 : Les surcharges d'uri de chaîne appellent les surcharges de System.Uri

TypeName

StringUriOverloadsCallSystemUriOverloads

CheckId

CA1057

Catégorie

Microsoft.CSharp

Modification avec rupture

Modification sans rupture

Cause

Un type déclare des surcharges de méthode qui diffèrent uniquement par le remplacement d'un paramètre de chaîne par un paramètre System.Uri, et la surcharge qui accepte le paramètre de chaîne n'appelle pas la surcharge qui accepte le paramètre Uri.

Description de la règle

Sachant que les surcharges diffèrent uniquement par le paramètre de chaîne/Uri, la chaîne est censée représenter un identificateur de ressources uniformes (URI). Une représentation sous forme de chaîne d'un URI est sujette aux erreurs d'analyse et d'encodage, et peut entraîner des failles de sécurité. La classe Uri fournit ces services de manière sûre et sécurisée. Pour profiter des avantages de la classe Uri, la surcharge de chaîne doit appeler la surcharge Uri à l'aide de l'argument string.

Comment corriger les violations

Réimplémentez la méthode qui utilise la représentation sous forme de chaîne de l'URI, afin qu'elle crée une instance de la classe Uri à l'aide de l'argument string, puis passe l'objet Uri à la surcharge qui possède le paramètre Uri.

Quand supprimer les avertissements

Il est possible de supprimer sans risque un avertissement de cette règle si le paramètre de chaîne ne représente pas une URI.

Exemple

L'exemple suivant présente une surcharge string correctement implémentée.

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) { }
   };
}

Règles connexes

CA2234 : Passez des objets System.Uri à la place de chaînes

CA1056 : Les propriétés Uri ne doivent pas être des chaînes

CA1054 : Les paramètres Uri ne doivent pas être des chaînes

CA1055 : Les valeurs de retour Uri ne doivent pas être des chaînes