CA2234: Passar objetos de System. URI em vez de seqüências de caracteres
TypeName |
PassSystemUriObjectsInsteadOfStrings |
CheckId |
CA2234 |
<strong>Categoria</strong> |
Microsoft.Usage |
Alteração significativa |
Não separável |
Causa
É feita uma chamada para um método que possui um parâmetro de seqüência 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 System.Uri parâmetro.
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 representam um identificador de recursos uniforme (URI). Uma representação de seqüência de caracteres de um URI está sujeita a análise e erros de codificação e pode levar a vulnerabilidades de segurança. O Uri classe fornece esses serviços em uma maneira segura e protegida. Quando há uma escolha entre duas sobrecargas que diferem somente em relação a representação de um URI, o usuário deve escolher a sobrecarga que utiliza um Uri argumento.
Como corrigir violações
Para corrigir uma violação desta regra, chame a sobrecarga que utiliza o Uri argumento.
Quando suprimir avisos
É seguro eliminar um aviso esta regra se o parâmetro de seqüência 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, que chama corretamente o Uri sobrecarga.
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: Sobrecargas URI de seqüência de caracteres chamada System. URI sobrecargas
CA1056: Propriedades URI não devem ser seqüências de caracteres
CA1054: Parâmetros da URI não devem ser seqüências de caracteres
CA1055: URI retornar valores não devem ser seqüências de caracteres