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 9 | No |
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 basis kode mana yang akan dijalankan aturan ini, berdasarkan aksesibilitasnya, dengan mengatur opsi api_surface. 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
Nota
Ganti bagian XXXX
CAXXXX
dengan ID aturan yang berlaku.
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) { }
}
}