Partager via


Les surcharges d'URI de chaîne appellent les surcharges System.Uri

Mise à jour : novembre 2007

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 de codage, et peut entraîner des problèmes en matière 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

Passer les objets System.Uri au lieu de chaînes

Les propriétés URI ne doivent pas être des chaînes

Les paramètres URI ne doivent pas être des chaînes

Les valeurs de retour URI ne doivent pas être des chaînes