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 |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 9'da varsayılan olarak etkin | Hayır |
Neden
Adı "uri", "Uri", "urn", "Urn", "url" veya "Url" içeren bir dize parametresine sahip bir yönteme çağrı yapılır ve yöntemin bildirim türü parametresi olan System.Uri ilgili bir yöntem aşırı yüklemesini 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ı, deve büyük/küçük harf kuralına göre belirteçlere bölünür ve ardından her belirtecin "uri", "Uri", "urn", "Urn", "url" veya "Url" değerine eşit olup olmadığını görmek için denetlenir. Eşleşme varsa, parametresinin tekdüzen kaynak tanımlayıcısını (URI) temsil ediyor olduğu varsayılır. Bir URI'nın dize sunumu ayrıştırma ve hataları kodlama eğilimindedir ve güvenlik açıklarına yol açabilir. Uri sınıfı bu hizmetleri güvenli ve güvenli bir şekilde sağlar. İki aşırı yükleme arasında yalnızca URI'nin gösterimiyle ilgili olarak farklı bir seçim olduğunda, kullanıcı bağımsız Uri değişken alan aşırı yüklemeyi seçmelidir.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için bağımsız değişkeni alan aşırı yüklemeyi çağırın Uri .
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 none
olarak ayarlayın.
[*.{cs,vb}]
dotnet_diagnostic.CA2234.severity = none
Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.
Çözümlemek için kod yapılandırma
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
Bu kuralın üzerinde çalıştırılacak kod tabanınızın hangi bölümlerini erişilebilirliklerine göre 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
Örnek
Aşağıdaki örnekte, ErrorProne
kuralı ihlal eden bir yöntemi ve aşırı yüklemeyi doğru şekilde çağıran bir yöntem SaferWay
gö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 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) { }
}
}