CA2234: Dizeler yerine System.Uri nesneleri gönderin

Özellik Değer
Kural Kimliği CA2234
Başlık Dizeler yerine System.Uri nesneleri gönderin
Kategori Kullanım
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Hayır
Geçerli diller C# ve Visual Basic

Neden

Bir adı "uri", "Uri", "urn", "Urn", "url" veya "Url" içeren bir dize parametresi olan bir yönteme çağrı yapılır ve bu yöntemin tanımlayıcı türü, System.Uri parametresine sahip ilgili bir yöntem aşırı yüklenmesi içerir.

Varsayılan olarak, bu kural yalnızca dışarıdan görünen yöntemlere ve türlere bakar, ancak bu yapılandırılabilir.

Kural açıklaması

Parametre adı, camel case yazım tarzına göre parçalara ayrılır ve ardından her parça "uri", "Uri", "urn", "Urn", "url" veya "Url" olup olmadığını kontrol etmek için incelenir. Eşleşme varsa, parametresinin tekdüzen kaynak tanımlayıcısını (URI) temsil ediyor olduğu varsayılır. Bir URI'nin dize temsili, ayrıştırma ve kodlama hatalarına eğilimlidir ve güvenlik açıklarına yol açabilir. Uri sınıfı bu hizmetleri güvenli ve güvenli bir şekilde sağlar. Kullanıcı iki aşırı yükleme arasında, yalnızca URI'nin gösterimi açısından farklı bir seçim olduğunda, Uri argümanını alan aşırı yüklemeyi seçmelidir.

İhlalleri düzeltme

Bu kuralın ihlalini düzeltmek için Uri bağımsız değişkenini alan aşırı yüklemeyi çağırın.

Uyarıların ne zaman bastırılması gerekiyor?

Dize parametresi bir URI'yi temsil etmiyorsa, bu kuraldan gelen bir uyarıyı engellemek güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

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

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

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

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.

Kod çözümleme için konfigüre et

Bu kuralın kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırmak için aşağıdaki seçeneği kullanın.

Bu seçeneği yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Kullanım) tüm kurallar için yapılandırabilirsiniz. Daha fazla bilgi için bkz . Kod kalitesi kuralı yapılandırma seçenekleri.

Belirli API yüzeylerini ekleme

api_surface seçeneğini ayarlayarak, bu kuralın erişilebilirliği temelinde kod tabanınızın hangi bölümlerinde çalıştırılacaklarını yapılandırabilirsiniz. Örneğin, kuralın yalnızca genel olmayan API yüzeyinde çalıştırılması gerektiğini belirtmek için projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Not

XXXX CAXXXX bölümünü geçerli kuralın kimliğiyle değiştirin.

Örnek

Aşağıdaki örnekte, ErrorPronekuralı ihlal eden bir yöntemi ve aşırı yüklemeyi doğru şekilde çağıran bir yöntem SaferWaygösterilmektedir 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();

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

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