CA1056: URI özellikleri dizeler olmamalıdır
Özellik | Değer |
---|---|
Kural Kimliği | CA1056 |
Başlık | URI özellikleri dize olmamalıdır |
Kategori | Tasarım |
Hataya neden olan veya bozulmayan düzeltme | Yeni |
.NET 8'de varsayılan olarak etkin | Hayır |
Neden
Bir tür adı "uri", "Uri", "urn", "Urn", "url" veya "Url" içeren bir dize özelliği bildirir.
Varsayılan olarak, bu kural yalnızca dışarıdan görünen türlere bakar, ancak bu yapılandırılabilir.
Kural açıklaması
Bu kural, özellik adını Pascal büyük/küçük harf kuralına göre belirteçlere böler ve her belirtecin "uri", "Uri", "urn", "Urn", "url" veya "Url" değerine eşit olup olmadığını denetler. Bir eşleşme varsa, kural özelliğin tekdüzen kaynak tanımlayıcısını (URI) temsil ettiğini varsayar. Bir URI'nın dize sunumu ayrıştırma ve hataları kodlama eğilimindedir ve güvenlik açıklarına yol açabilir. System.Uri sınıfı bu hizmetleri güvenli ve güvenli bir şekilde sağlar.
İhlalleri düzeltme
Bu kuralın ihlalini düzeltmek için özelliğini bir Uri tür olarak değiştirin.
Uyarıların ne zaman bastırılması gerekiyor?
Özellik 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 CA1056
// The code that's violating the rule is on this line.
#pragma warning restore CA1056
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.CA1056.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çenekleri kullanın.
- Belirli API yüzeylerini ekleme
- Belirli simgeleri hariç tutma
- Belirli türleri ve türetilmiş türlerini dışlama
Bu seçenekleri yalnızca bu kural, geçerli olduğu tüm kurallar veya bu kategorideki (Tasarı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
Belirli simgeleri hariç tutma
Türler ve yöntemler gibi belirli simgeleri analizden hariç tutabilirsiniz. Örneğin, kuralın adlı MyType
türlerdeki herhangi bir kodda çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType
Seçenek değerinde izin verilen simge adı biçimleri (ile |
ayrılmış):
- Yalnızca sembol adı (içeren tür veya ad alanı ne olursa olsun, ada sahip tüm simgeleri içerir).
- Simgenin belge kimliği biçimindeki tam adlar. Her simge adı için yöntemler
T:
, türler veN:
ad alanları gibiM:
bir sembol türü ön eki gerekir. .ctor
oluşturucular ve.cctor
statik oluşturucular için.
Örnekler:
Seçenek Değeri | Özet |
---|---|
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType |
adlı MyType tüm simgelerle eşleşir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = MyType1|MyType2 |
veya MyType2 adlı MyType1 tüm simgelerle eşleşir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS.MyType.MyMethod(ParamType) |
Belirtilen tam imza ile belirli bir yöntemi MyMethod eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_symbol_names = M:NS1.MyType1.MyMethod1(ParamType)|M:NS2.MyType2.MyMethod2(ParamType) |
Belirli yöntemlerle MyMethod1 ve MyMethod2 ilgili tam imzalarla eşleşir. |
Belirli türleri ve türetilmiş türlerini dışlama
Belirli türleri ve türetilmiş türlerini analizden dışlayabilirsiniz. Örneğin, kuralın adlı MyType
ve türetilmiş türleri içindeki hiçbir yöntemde çalışmaması gerektiğini belirtmek için, projenizdeki bir .editorconfig dosyasına aşağıdaki anahtar-değer çiftini ekleyin:
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType
Seçenek değerinde izin verilen simge adı biçimleri (ile |
ayrılmış):
- Yalnızca tür adı (içeren tür veya ad alanına bakılmaksızın adı olan tüm türleri içerir).
- Simgenin belge kimliği biçiminde, isteğe bağlı
T:
ön ek içeren tam adlar.
Örnekler:
Seçenek Değeri | Özet |
---|---|
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType |
Adlı MyType tüm türleri ve türetilmiş türlerinin tümünü eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = MyType1|MyType2 |
veya MyType2 adlı MyType1 tüm türleri ve türetilmiş türlerinin tümünü eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS.MyType |
Belirli bir türü MyType verilen tam adla ve türetilmiş tüm türleriyle eşleştirir. |
dotnet_code_quality.CAXXXX.excluded_type_names_with_derived_types = M:NS1.MyType1|M:NS2.MyType2 |
Belirli türleri MyType1 ve MyType2 ilgili tam adlarla ve bunların türetilmiş tüm türleriyle eşleşir. |
Örnek
Aşağıdaki örnekte, ErrorProne
bu kuralı ihlal eden bir türü ve kuralı karşılayan bir türü SaferWay
gösterilir.
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