CA2234: Pase objetos System.Uri en lugar de cadenas
Nombre de tipo |
PassSystemUriObjectsInsteadOfStrings |
Identificador de comprobación |
CA2234 |
Categoría |
Microsoft.Usage |
Cambio problemático |
No |
Causa
Se ha realizado una llamada a un método que tiene un parámetro de cadena cuyo nombre contiene "uri", "Uri", "urn", "Urn", "url", o "Url"; y el tipo del método que se declara contiene una sobrecarga del método correspondiente que tiene un parámetro System.Uri.
Descripción de la regla
Un nombre de parámetro se divide en símbolos (token) basándose en la convención Camel de uso de mayúsculas y, a continuación, se comprueba cada símbolo para ver si son iguales a "uri", "Uri", "urn", "Urn", "url", o "Url". Si hay alguna coincidencia, se supone que el parámetro representa un identificador de recursos uniforme (URI). Las representaciones de cadena de identificadores URI tienen tendencia a analizar y codificar errores, por lo que pueden crear puntos vulnerables en la seguridad. La clase Uri proporciona estos servicios de una manera segura. Cuando hay que elegir entre dos sobrecargas que difieren sólo en la representación de un identificador URI, el usuario debería elegir la sobrecarga que toma un argumento Uri.
Cómo corregir infracciones
Para corregir una infracción de esta regla, llame a la sobrecarga que toma el argumento el Uri.
Cuándo suprimir advertencias
Puede suprimirse de forma segura una advertencia de esta regla si el parámetro de cadena no representa ningún URI.
Ejemplo
El ejemplo siguiente muestra un método, ErrorProne, que infringe la regla y un método, SaferWay, que llama correctamente al Uri sobrecargado.
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) {}
}
};
}
Reglas relacionadas
CA1057: Las sobrecargas URI de cadena llaman a sobrecargas System.Uri
CA1056: Las propiedades URI no deben ser cadenas