CA2234: passar objetos System.Uri em vez de cadeias de caracteres
TypeName |
PassSystemUriObjectsInsteadOfStrings |
CheckId |
CA2234 |
Categoria |
Microsoft.Usage |
Alteração Significativa |
Sem Quebra |
Causa
For feita uma chamada para um método que possui um parâmetro de cadeia de caracteres cujo nome contém “uri”, “Uri”, “urn”, “urn”, “URL”, ou “URL”; declarando e o tipo de método contém uma sobrecarga correspondente do método que possui um parâmetro de Uri .
Descrição da Regra
Um nome de parâmetro é dividido em tokens com base na convenção de uso de maiúsculas e minúsculas em camelo, e cada token é verificado em para verificar se é igual a “uri”, “Uri”, “urn”, “urn”, “URL”, ou “URL”.Se houver uma correspondência, o parâmetro será assumido para representar o Uniform Resource Identifier (URI).Uma representação de cadeia de caracteres de um URI for susceptível a erros de análise e de codificação, e pode resultar em vulnerabilidades de segurança.A classe de Uri fornece estes serviços em um cofre e uma maneira 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 usa um argumento de Uri .
Como Corrigir Violações
Para corrigir uma violação desta regra, chame a sobrecarga que usa o argumento de Uri .
Quando Suprimir Alertas
É seguro suprimir um aviso dessa regra se o parâmetro de cadeia de caracteres não representa um URI.
Exemplo
O exemplo a seguir mostra um método, ErrorProne, que viola a regra e um método, SaferWay, chamada corretamente a sobrecarga de Uri .
Imports System
Namespace DesignLibrary
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("https://www.adventure-works.com")
End Sub
Sub SaferWay()
Try
Dim newUri As New Uri("https://www.adventure-works.com")
uriHistory.AddToHistory(newUri)
Catch uriException As UriFormatException
End Try
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
class History
{
internal void AddToHistory(string uriString) {}
internal void AddToHistory(Uri uriType) {}
}
public class Browser
{
History uriHistory = new History();
public void ErrorProne()
{
uriHistory.AddToHistory("https://www.adventure-works.com");
}
public void SaferWay()
{
try
{
Uri newUri = new Uri("https://www.adventure-works.com");
uriHistory.AddToHistory(newUri);
}
catch(UriFormatException uriException) {}
}
}
}
#using <system.dll>
using namespace System;
namespace DesignLibrary
{
ref class History
{
public:
void AddToHistory(String^ uriString) {}
void AddToHistory(Uri^ uriType) {}
};
public ref class Browser
{
History^ uriHistory;
public:
Browser()
{
uriHistory = gcnew History();
}
void ErrorProne()
{
uriHistory->AddToHistory("https://www.adventure-works.com");
}
void SaferWay()
{
try
{
Uri^ newUri = gcnew Uri("https://www.adventure-works.com");
uriHistory->AddToHistory(newUri);
}
catch(UriFormatException^ uriException) {}
}
};
}
Regras Relacionadas
CA1057: as sobrecargas de URI da cadeia de caracteres chamam sobrecargas System.Uri
CA1056: as propriedades de URI não devem ser cadeias de caracteres
CA1054: os parâmetros de URI não devem ser cadeias de caracteres
CA1055: os valores de retorno de URI não devem ser cadeias de caracteres