Partager via


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

TypeName

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

Catégorie

Microsoft.Usage

Modification avec rupture

Modification sans rupture

Cause

Un appel à une méthode doté d'un paramètre de chaîne dont le nom contient "uri", "Uri", "urn", "Urn", "url" ou "Url" est effectué ; le type déclarant de la méthode contient une surcharge de méthode correspondante dotée d'un paramètre Uri.

Description de la règle

Un nom de paramètre est fractionné en jetons fondés sur la convention de casse mixte, puis chaque jeton est contrôlé pour savoir s'il est ou non égal à "uri", "Uri", "urn", "Urn", "url" ou "Url."En cas de correspondance, le paramètre est considéré comme représentant un identificateur de ressources uniformes, ou URI (Uniform Resource Identifier).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.En présence d'un choix entre deux surcharges qui diffèrent uniquement par la représentation d'un URI, l'utilisateur doit choisir la surcharge qui accepte un argument Uri.

Comment corriger les violations

Pour corriger une infraction à cette règle, appelez la surcharge qui accepte l'argument 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 méthode, ErrorProne, qui enfreint la règle, et une méthode, SaferWay, qui appelle correctement la surcharge Uri.

Imports System

Namespace DesignLibrary

   Class History

      Friend Sub AddToHistory(uriString As String)
      End Sub 

      Friend Sub AddToHistory(uriType As Uri)
      End Sub 

   End Class 

   Public Class Browser

      Dim uriHistory As New History()

      Sub ErrorProne()
         uriHistory.AddToHistory("https://www.adventure-works.com")
      End Sub 

      Sub SaferWay()
         Try 
            Dim newUri As New Uri("https://www.adventure-works.com")
            uriHistory.AddToHistory(newUri)
         Catch uriException As UriFormatException
         End Try 
      End Sub 

   End Class 

End Namespace
using System;

namespace DesignLibrary
{
   class History
   {
      internal void AddToHistory(string uriString) {}
      internal void AddToHistory(Uri uriType) {}
   }

   public class Browser
   {
      History uriHistory = new History();

      public void ErrorProne()
      {
         uriHistory.AddToHistory("https://www.adventure-works.com");
      }

      public void SaferWay()
      {
         try
         {
            Uri newUri = new Uri("https://www.adventure-works.com");
            uriHistory.AddToHistory(newUri);
         }
         catch(UriFormatException uriException) {}
      }
   }
}
#using <system.dll>
using namespace System;

namespace DesignLibrary
{
   ref class History
   {
   public:
      void AddToHistory(String^ uriString) {}
      void AddToHistory(Uri^ uriType) {}
   };

   public ref class Browser
   {
      History^ uriHistory;

   public:
      Browser()
      {
         uriHistory = gcnew History();
      }

      void ErrorProne()
      {
         uriHistory->AddToHistory("https://www.adventure-works.com");
      }

      void SaferWay()
      {
         try
         {
            Uri^ newUri = gcnew Uri("https://www.adventure-works.com");
            uriHistory->AddToHistory(newUri);
         }
         catch(UriFormatException^ uriException) {}
      }
   };
}

Règles connexes

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

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