CA1057: Las sobrecargas URI de cadena llaman a sobrecargas System.Uri
Nombre de tipo |
StringUriOverloadsCallSystemUriOverloads |
Identificador de comprobación |
CA1057 |
Categoría |
Microsoft.Design |
Cambio problemático |
Poco problemático |
Causa
Un tipo declara una sobrecarga de método que sólo se distingue por reemplazar un parámetro de cadena con un parámetro System.Uri, y la sobrecarga que toma el parámetro de cadena no llama a la sobrecarga que toma el parámetro Uri.
Descripción de la regla
Dado que las sobrecargas sólo se distinguen por el parámetro de cadena/Uri, se supone que la cadena 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. Para aprovechar las ventajas de la clase Uri, la sobrecarga de la cadena debería llamar a la sobrecarga de Uri utilizando el argumento de cadena.
Cómo corregir infracciones
Vuelva a implementar el método que utiliza la representación de cadena del URI para crear una instancia de la clase Uri utilizando el argumento de cadena y, a continuación, pasa el objeto Uri a la sobrecarga que tiene el parámetro 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
En el siguiente ejemplo se muestra una sobrecarga de cadena correctamente implementada.
Imports System
Namespace DesignLibrary
Public Class History
Sub AddToHistory(uriString As String)
Dim newUri As New Uri(uriString)
AddToHistory(newUri)
End Sub
Sub AddToHistory(uriType As Uri)
End Sub
End Class
End Namespace
using System;
namespace DesignLibrary
{
public class History
{
public void AddToHistory(string uriString)
{
Uri newUri = new Uri(uriString);
AddToHistory(newUri);
}
public void AddToHistory(Uri uriType) { }
}
}
#using <system.dll>
using namespace System;
namespace DesignLibrary
{
public ref class History
{
public:
void AddToHistory(String^ uriString)
{
Uri^ newUri = gcnew Uri(uriString);
AddToHistory(newUri);
}
void AddToHistory(Uri^ uriType) { }
};
}
Reglas relacionadas
CA2234: Pase objetos System.Uri en lugar de cadenas
CA1056: Las propiedades URI no deben ser cadenas