Megosztás a következőn keresztül:


CA2234: System.Uri-objektumok átadása sztringek helyett

Tulajdonság Érték
Szabályazonosító CA2234
Cím System.Uri-objektumok átadása sztringek helyett
Kategória Használat
A javítás kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Nem

Ok

A metódus olyan metódust hív meg, amelynek sztringparamétere "uri", "Uri", "urn", "Urn", "url" vagy "URL" értéket tartalmaz, és a metódus deklarálási típusa tartalmaz egy paraméterrel rendelkező System.Uri metódust.

Ez a szabály alapértelmezés szerint csak külsőleg látható metódusokat és típusokat tekint meg, de ez konfigurálható.

Szabály leírása

A paraméternevek a teveházi konvenciók alapján jogkivonatokra lesznek felosztva, majd a rendszer ellenőrzi, hogy az "uri", "Uri", "urn", "urn", "url" vagy "URL" értékkel egyenlő-e. Ha egyezés van, a paraméter egy egységes erőforrás-azonosítót (URI) jelöl. Az URI sztring-ábrázolása hajlamos elemzési és kódolási hibákra, és biztonsági résekhez vezethet. Az Uri osztály ezeket a szolgáltatásokat biztonságosan és biztonságosan biztosítja. Ha két olyan túlterhelés közül választhat, amelyek csak az URI-k ábrázolása tekintetében különböznek, a felhasználónak ki kell választania azt a túlterhelést, amely argumentumot Uri vesz igénybe.

Szabálysértések kijavítása

A szabály megsértésének kijavításához hívja meg az argumentumot tartalmazó túlterhelést Uri .

Mikor kell letiltani a figyelmeztetéseket?

Biztonságosan letilthatja a szabály figyelmeztetését, ha a sztringparaméter nem URI-t jelöl.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

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

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

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

További információ: Kódelemzési figyelmeztetések letiltása.

Kód konfigurálása elemzéshez

A következő beállítással konfigurálhatja, hogy a kódbázis mely részein futtassa ezt a szabályt.

Ezt a beállítást konfigurálhatja csak erre a szabályra, az összes szabályra, vagy az ebben a kategóriában (Használat) érvényes összes szabályra. További információ: Kódminőségi szabály konfigurációs beállításai.

Adott API-felületek belefoglalása

A kódbázis azon részeit konfigurálhatja, amelyeken futtathatja ezt a szabályt az akadálymentességük alapján. Ha például meg szeretné adni, hogy a szabály csak a nem nyilvános API-felületen fusson, adja hozzá a következő kulcs-érték párot a projekt egyik .editorconfig fájljához:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Példa

Az alábbi példa egy metódust mutat be, ErrorProneamely megsérti a szabályt és egy metódust, SaferWayamely helyesen hívja meg a túlterhelést 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) { }
    }
}