CA2234: Passar objetos System.Uri em vez de cadeias de caracteres
Property | Valor |
---|---|
ID da regra | CA2234 |
Título | Passar objetos System.Uri em vez de cadeias de caracteres |
Categoria | Usage |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 9 | Não |
Causa
Uma chamada é realizada para um método que tem um parâmetro de cadeia de caracteres cujo nome contém "uri", "Uri", "urn", "Urn", "url" ou "Url" e o tipo declarativo do método contém uma sobrecarga de método correspondente que tem um parâmetro System.Uri.
Por padrão, essa regra analisa apenas os métodos e tipos externamente visíveis, mas isso é configurável.
Descrição da regra
Um nome de parâmetro é dividido em tokens com base na convenção de uso de maiúsculas Camel-Case e, em seguida, cada token é verificado para ver se ele é igual a "uri", "Uri", "urn", "Urn", "url" ou "Url". Se houver uma correspondência, assume-se que o parâmetro representa um URI (Uniform Resource Identifier). Uma representação de cadeia de caracteres de um URI está propensa a erros de análise e de codificação, e pode resultar em vulnerabilidades de segurança. A classe Uri fornece esses serviços de maneira segura. Quando há uma opção entre duas sobrecargas que diferem apenas em relação à representação de um URI, o usuário deve escolher a sobrecarga que usa um argumento Uri.
Como corrigir violações
Para corrigir uma violação dessa regra, chame a sobrecarga que usa o argumento Uri.
Quando suprimir avisos
É seguro suprimir um aviso dessa regra se o parâmetro de cadeia de caracteres não representa um URI.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA2234
// The code that's violating the rule is on this line.
#pragma warning restore CA2234
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2234.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.
Configurar código para analisar
Use a opção a seguir para configurar em quais partes da base de código essa regra deve ser executada.
Você pode configurar essa opção apenas para essa regra, para todas as regras às quais ela se aplica ou para todas as regras nessa categoria (Uso) às quais ela se aplica. Para saber mais, confira Opções de configuração de regra de qualidade de código.
Incluir superfícies de API específicas
É possível configurar em quais partes da base de código essa regra deverá ser executada, com base na acessibilidade. Por exemplo, para especificar que a regra deverá ser executada apenas na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig no projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Nota
Substitua a parte XXXX
de CAXXXX
pela ID da regra aplicável.
Exemplo
O exemplo a seguir mostra um método, ErrorProne
, que viola a regra e um método, SaferWay
, que chama corretamente a sobrecarga 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) { }
}
}