Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
| Ö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) { }
}
}