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