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