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 | Utilização |
A correção está quebrando ou não quebrando | Sem quebra |
Habilitado por padrão no .NET 9 | Não |
Motivo
Uma chamada é feita para um método que tem um parâmetro string cujo nome contém "uri", "Uri", "urn", "Urn", "url" ou "Url" e o tipo de declaração do método contém uma sobrecarga de método correspondente que tem um System.Uri parâmetro.
Por padrão, essa regra examina apenas métodos e tipos visíveis externamente, mas isso é configurável.
Descrição da regra
Um nome de parâmetro é dividido em tokens com base na convenção camel casing e, em seguida, cada token é verificado para ver se é igual a "uri", "Uri", "urn", "Urn", "url" ou "Url". Se houver uma correspondência, presume-se que o parâmetro representa um identificador de recurso uniforme (URI). Uma representação de cadeia de caracteres de um URI é propensa a erros de análise e codificação e pode levar a vulnerabilidades de segurança. A Uri classe presta estes serviços de forma segura. Quando há uma escolha entre duas sobrecargas que diferem apenas em relação à representação de um URI, o usuário deve escolher a sobrecarga que leva um Uri argumento.
Como corrigir violações
Para corrigir uma violação dessa regra, chame a sobrecarga que leva o Uri argumento.
Quando suprimir avisos
É seguro suprimir um aviso dessa regra se o parâmetro string não representar um URI.
Suprimir um aviso
Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 de um arquivo, pasta ou projeto, defina sua gravidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2234.severity = none
Para obter mais informações, consulte Como suprimir avisos de análise de código.
Configurar código para análise
Use a opção a seguir para configurar em quais partes da sua base de código executar essa regra.
Você pode configurar essa opção apenas para esta regra, para todas as regras às quais ela se aplica ou para todas as regras nesta categoria (Uso) às quais ela se aplica. Para obter mais informações, consulte Opções de configuração da regra de qualidade de código.
Incluir superfícies de API específicas
Você pode configurar em quais partes da sua base de código executar essa regra, com base em sua acessibilidade. Por exemplo, para especificar que a regra deve ser executada somente na superfície de API não pública, adicione o seguinte par chave-valor a um arquivo .editorconfig em seu projeto:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exemplo
O exemplo a seguir mostra um método, ErrorProne
, que viola a regra e um método, SaferWay
, que chama corretamente a Uri sobrecarga:
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) { }
}
}