Condividi tramite


CA2234: Passare oggetti System.Uri invece di stringhe

Proprietà valore
ID regola CA2234
Titolo Passare oggetti System.Uri invece di stringhe
Categoria Utilizzo
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 No

Causa

Viene eseguita una chiamata a un metodo con un parametro stringa il cui nome contiene "uri", "Uri", "urn", "urn", "url" o "Url" e il tipo dichiarante del metodo contiene un overload del metodo corrispondente con un System.Uri parametro .

Per impostazione predefinita, questa regola esamina solo metodi e tipi visibili esternamente, ma è configurabile.

Descrizione regola

Un nome di parametro viene suddiviso in token basati sulla convenzione di maiuscole e minuscole camel e quindi ogni token viene controllato per verificare se è uguale a "uri", "Uri", "urn", "Urn", "url" o "Url". Se esiste una corrispondenza, si presuppone che il parametro 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 Uri classe fornisce questi servizi in modo sicuro e sicuro. Quando esiste una scelta tra due overload che differiscono solo per la rappresentazione di un URI, l'utente deve scegliere l'overload che accetta un Uri argomento.

Come correggere le violazioni

Per correggere una violazione di questa regola, chiamare l'overload che accetta l'argomento Uri .

Quando eliminare gli avvisi

È possibile eliminare un avviso da questa regola se il parametro stringa non rappresenta un URI.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

#pragma warning disable CA2234
// The code that's violating the rule is on this line.
#pragma warning restore CA2234

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

[*.{cs,vb}]
dotnet_diagnostic.CA2234.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Configurare il codice da analizzare

Usare l'opzione seguente per configurare le parti della codebase in cui eseguire questa regola.

È possibile configurare questa opzione solo per questa regola, per tutte le regole a cui si applica o per tutte le regole in questa categoria (utilizzo) a cui si applica. Per altre informazioni, vedere Opzioni di configurazione delle regole di qualità del codice.

Includere superfici API specifiche

È possibile configurare le parti della codebase in modo da eseguire questa regola in base all'accessibilità. Ad esempio, per specificare che la regola deve essere eseguita solo sulla superficie dell'API non pubblica, aggiungere la coppia chiave-valore seguente a un file con estensione editorconfig nel progetto:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Esempio

Nell'esempio seguente viene illustrato un metodo, ErrorProne, che viola la regola e un metodo , SaferWay, che chiama correttamente l'overload Uri :

Imports System

Namespace ca2234

    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("http://www.adventure-works.com")
        End Sub

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

    End Class

End Namespace
class History
{
    internal void AddToHistory(string uriString) { }
    internal void AddToHistory(Uri uriType) { }
}

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

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

    public void SaferWay()
    {
        try
        {
            Uri newUri = new Uri("http://www.adventure-works.com");
            uriHistory.AddToHistory(newUri);
        }
        catch (UriFormatException) { }
    }
}