Bagikan melalui


CA2234: Meneruskan objek System.Uri bukan string

Properti Nilai
ID Aturan CA2234
Judul Meneruskan objek System.Uri alih-alih string
Golongan Penggunaan
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Tidak

Penyebab

Panggilan dilakukan ke metode yang memiliki parameter string yang namanya berisi "uri", "Uri", "urn", "Urn", "url", atau "Url" dan jenis deklarasikan metode berisi metode yang sesuai kelebihan beban yang memiliki System.Uri parameter.

Secara default, aturan ini hanya melihat metode dan jenis yang terlihat secara eksternal, tetapi ini dapat dikonfigurasi.

Deskripsi aturan

Nama parameter dibagi menjadi token berdasarkan konvensi casing unta, dan kemudian setiap token diperiksa untuk melihat apakah sama dengan "uri", "Uri", "urn", "Urn", "url", atau "Url". Jika ada kecocokan, parameter diasumsikan mewakili pengidentifikasi sumber daya seragam (URI). Representasi string URI rentan terhadap kesalahan penguraian dan pengodean, dan dapat menyebabkan kerentanan keamanan. Kelas Uri menyediakan layanan ini dengan cara yang aman dan terjamin. Ketika ada pilihan antara dua kelebihan beban yang berbeda hanya mengenai representasi URI, pengguna harus memilih kelebihan beban yang mengambil Uri argumen.

Cara memperbaiki pelanggaran

Untuk memperbaiki pelanggaran aturan ini, panggil kelebihan beban yang mengambil Uri argumen.

Kapan harus menekan peringatan

Menyembunyikan peringatan dari aturan ini aman dilakukan jika parameter string tidak mewakili URI.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

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

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

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

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.

Mengonfigurasi kode yang akan dianalisis

Gunakan opsi berikut untuk mengonfigurasi bagian mana dari codebase Anda yang akan menjalankan aturan ini.

Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku untuknya, atau untuk semua aturan dalam kategori ini (Penggunaan) yang diterapkannya. Untuk informasi selengkapnya, lihat Opsi konfigurasi aturan kualitas kode.

Menyertakan permukaan API tertentu

Anda dapat mengonfigurasi bagian mana dari basis kode yang akan menjalankan aturan ini, berdasarkan aksesibilitasnya. Misalnya, untuk menentukan bahwa aturan hanya boleh dijalankan pada permukaan API non-publik, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Contoh

Contoh berikut menunjukkan metode, ErrorProne, yang melanggar aturan dan metode, SaferWay, yang memanggil Uri kelebihan beban dengan benar:

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) { }
    }
}