CA1057: Gli overload URI dei valori di stringa chiamano gli overload System.Uri
TypeName |
StringUriOverloadsCallSystemUriOverloads |
CheckId |
CA1057 |
Category |
Microsoft.Design |
Breaking Change |
Non sostanziale |
Causa
Un tipo dichiara overload di metodo che differiscono solo per la sostituzione di un parametro di stringa con un parametro System.Uri e l'overload che accetta il parametro di stringa non chiama l'overload che accetta il parametro Uri.
Descrizione della regola
Poiché gli overload differiscono solo per il parametro di stringa oUri, si presuppone che la stringa rappresenti un URI (Uniform Resource Identifier). Una rappresentazione in forma di stringa di un URI è soggetta a errori di analisi e codifica e può creare vulnerabilità nella sicurezza. La classe Uri fornisce questi servizi in un modo sicuro e protetto. Per usufruire dei vantaggi della classe Uri, l'overload della stringa deve chiamare l'overload Uri utilizzando l'argomento stringa.
Come correggere le violazioni
Reimplementare il metodo che utilizza la rappresentazione di stringa dell'URI in modo che crei un'istanza della classe Uri utilizzando l'argomento stringa, quindi passi l'oggetto Uri all'overload che presenta il parametro Uri.
Esclusione di avvisi
L'esclusione di un avviso da questa regola è sicura se il parametro di stringa non rappresenta un URI.
Esempio
Nell'esempio riportato di seguito viene illustrato un overload di stringa implementato correttamente.
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) { }
};
}
Regole correlate
CA2234: Passare oggetti System.Uri invece di stringhe
CA1056: Le proprietà URI non devono essere stringhe