Las sobrecargas de URI de la cadena llaman a las sobrecargas de System.Uri

Actualización: noviembre 2007

Nombre de tipo

StringUriOverloadsCallSystemUriOverloads

Identificador de comprobación

CA1057

Categoría

Microsoft.Design

Cambio problemático

No problemático

Motivo

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

Pase objetos System.Uri en lugar de cadenas

Las propiedades de URI no deben ser cadenas

Los parámetros URI no deben ser cadenas

Los valores devueltos de URI no deben ser cadenas