CA1056: Properti URI tidak boleh berupa string
Properti | Nilai |
---|---|
ID Aturan | CA1056 |
Judul | Properti URI tidak boleh berupa string |
Golongan | Desain |
Perbaikan bersifat disruptif atau non-disruptif | Merusak |
Diaktifkan secara default di .NET 9 | No |
Penyebab
Jenis mendeklarasikan properti string yang namanya berisi "uri", "Uri", "urn", "Urn", "url", atau "Url".
Secara default, aturan ini hanya melihat jenis yang terlihat secara eksternal, tetapi ini dapat dikonfigurasi.
Deskripsi aturan
Aturan ini membagi nama properti menjadi token berdasarkan konvensi casing Pascal dan memeriksa apakah setiap token sama dengan "uri", "Uri", "urn", "Urn", "url", atau "Url". Jika ada kecocokan, aturan mengasumsikan bahwa properti mewakili pengidentifikasi sumber daya seragam (URI). Representasi string URI rentan terhadap kesalahan penguraian dan pengodean, dan dapat menyebabkan kerentanan keamanan. Kelas System.Uri menyediakan layanan ini dengan cara yang aman dan terjamin.
Cara memperbaiki pelanggaran
Untuk memperbaiki pelanggaran aturan ini, ubah properti menjadi Uri jenis.
Kapan harus menekan peringatan
Aman untuk menekan peringatan dari aturan ini jika properti 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 CA1056
// The code that's violating the rule is on this line.
#pragma warning restore CA1056
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1056.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.
- Menyertakan permukaan API tertentu
- Mengecualikan simbol tertentu
- Mengecualikan jenis tertentu dan jenis turunannya
Anda dapat mengonfigurasi opsi ini hanya untuk aturan ini, untuk semua aturan yang berlaku, atau untuk semua aturan dalam kategori ini (Desain) 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.
Mengecualikan simbol tertentu
Anda dapat mengecualikan simbol tertentu, seperti jenis dan metode, dari analisis dengan mengatur opsi excluded_symbol_names. Misalnya, untuk menentukan bahwa aturan tidak boleh berjalan pada kode apa pun dalam jenis bernama MyType
, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Nota
Ganti bagian XXXX
CAXXXX
dengan ID aturan yang berlaku.
Format nama simbol yang diizinkan pada nilai opsi (dipisahkan oleh |
):
- Nama simbol saja (menyertakan semua simbol dengan nama, terlepas dari jenis atau namespace yang memuatnya).
- Nama yang sepenuhnya memenuhi syarat dalam format ID dokumentasi simbol. Setiap nama simbol memerlukan awalan jenis simbol, seperti
M:
untuk metode,T:
untuk jenis, danN:
untuk namespace. -
.ctor
untuk konstruktor dan.cctor
untuk konstruktor statik.
Contoh:
Nilai Opsi | Ringkasan |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
Mencocokkan semua simbol bernama MyType . |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
Mencocokkan semua simbol bernama MyType1 atau MyType2 . |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Mencocokkan MyMethod metode tertentu dengan tanda tangan yang sepenuhnya memenuhi syarat yang ditentukan. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Mencocokkan MyMethod1 dan MyMethod2 metode tertentu dengan masing-masing tanda tangan yang sepenuhnya memenuhi syarat. |
Mengecualikan jenis tertentu dan jenis turunannya
Anda dapat mengecualikan jenis tertentu dan jenis turunannya dari analisis dengan mengatur opsi excluded_type_names_with_derived_types. Misalnya, untuk menentukan bahwa aturan tidak boleh dijalankan pada metode apa pun dalam jenis bernama MyType
dan jenis turunannya, tambahkan pasangan kunci-nilai berikut ke file .editorconfig di proyek Anda:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Nota
Ganti bagian XXXX
CAXXXX
dengan ID aturan yang berlaku.
Format nama simbol yang diizinkan pada nilai opsi (dipisahkan oleh |
):
- Nama jenis saja (mencakup semua jenis dengan nama, terlepas dari jenis atau namespace yang memuatnya).
- Nama yang sepenuhnya memenuhi syarat dalam format ID dokumentasi simbol, dengan awalan
T:
opsional.
Contoh:
Nilai opsi | Ringkasan |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Mencocokkan semua jenis bernama MyType dan semua jenis turunannya. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
Mencocokkan semua jenis bernama MyType1 atau MyType2 dan semua jenis turunannya. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Mencocokkan MyType jenis tertentu dengan nama yang sepenuhnya memenuhi syarat tertentu dan semua jenis turunannya. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Mencocokkan MyType1 dan MyType2 jenis tertentu dengan masing-masing nama yang sepenuhnya memenuhi syarat, dan semua jenis turunannya. |
Contoh
Contoh berikut menunjukkan jenis, ErrorProne
, yang melanggar aturan ini, dan jenis, SaferWay
, yang memenuhi aturan.
public class ErrorProne
{
// Violates rule UriPropertiesShouldNotBeStrings.
public string? SomeUri { get; set; }
// Violates rule UriParametersShouldNotBeStrings.
public void AddToHistory(string uriString) { }
// Violates rule UriReturnValuesShouldNotBeStrings.
public string GetRefererUri(string httpHeader)
{
return "http://www.adventure-works.com";
}
}
public class SaferWay
{
// To retrieve a string, call SomeUri.ToString().
// To set using a string, call SomeUri = new Uri(string).
public Uri? SomeUri { get; set; }
public void AddToHistory(string uriString)
{
// Check for UriFormatException.
AddToHistory(new Uri(uriString));
}
public void AddToHistory(Uri uriType) { }
public Uri GetRefererUri(string httpHeader)
{
return new Uri("http://www.adventure-works.com");
}
}
Imports System
Namespace ca1056
Public Class ErrorProne
' Violates rule UriPropertiesShouldNotBeStrings.
Property SomeUri As String
' Violates rule UriParametersShouldNotBeStrings.
Sub AddToHistory(uriString As String)
End Sub
' Violates rule UriReturnValuesShouldNotBeStrings.
Function GetRefererUri(httpHeader As String) As String
Return "http://www.adventure-works.com"
End Function
End Class
Public Class SaferWay
' To retrieve a string, call SomeUri.ToString().
' To set using a string, call SomeUri = New Uri(string).
Property SomeUri As Uri
Sub AddToHistory(uriString As String)
' Check for UriFormatException.
AddToHistory(New Uri(uriString))
End Sub
Sub AddToHistory(uriString As Uri)
End Sub
Function GetRefererUri(httpHeader As String) As Uri
Return New Uri("http://www.adventure-works.com")
End Function
End Class
End Namespace