CA2234: Skicka System.Uri-objekt i stället för strängar
Property | Värde |
---|---|
Regel-ID | CA2234 |
Title | Skicka System.Uri-objekt i stället för strängar |
Kategori | Användning |
Korrigeringen är icke-bakåtkompatibel | Icke-icke-bryta |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Ett anrop görs till en metod som har en strängparameter vars namn innehåller "uri", "Uri", "urn", "Urn", "url" eller "Url" och metodens deklarerande typ innehåller en motsvarande metodöverlagring som har en System.Uri parameter.
Som standard tittar den här regeln bara på externt synliga metoder och typer, men detta kan konfigureras.
Regelbeskrivning
Ett parameternamn delas upp i token baserat på kamelhöljekonventionen och sedan kontrolleras varje token för att se om den är lika med "uri", "Uri", "urn", "Urn", "url" eller "Url". Om det finns en matchning antas parametern representera en enhetlig resursidentifierare (URI). En strängrepresentation av en URI är benägen att parsa och koda fel och kan leda till säkerhetsrisker. Klassen Uri tillhandahåller dessa tjänster på ett säkert och säkert sätt. När det finns ett val mellan två överlagringar som bara skiljer sig åt när det gäller representationen av en URI, bör användaren välja den överlagring som tar ett Uri argument.
Så här åtgärdar du överträdelser
Om du vill åtgärda en överträdelse av den här regeln anropar du den överlagring som tar Uri argumentet.
När du ska ignorera varningar
Det är säkert att ignorera en varning från den här regeln om strängparametern inte representerar en URI.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA2234
// The code that's violating the rule is on this line.
#pragma warning restore CA2234
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA2234.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Konfigurera kod för analys
Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.
Du kan konfigurera det här alternativet för bara den här regeln, för alla regler som den gäller för eller för alla regler i den här kategorin (användning) som den gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.
Inkludera specifika API-ytor
Du kan konfigurera vilka delar av kodbasen som ska köras med den här regeln baserat på deras tillgänglighet. Om du till exempel vill ange att regeln endast ska köras mot den icke-offentliga API-ytan lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exempel
I följande exempel visas en metod, ErrorProne
, som bryter mot regeln och en metod, SaferWay
, som korrekt anropar överbelastningen 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) { }
}
}