Compartir a través de


Pase objetos System.Uri en lugar de cadenas

Actualización: noviembre 2007

Nombre de tipo

PassSystemUriObjectsInsteadOfStrings

Identificador de comprobación

CA2234

Categoría

Microsoft.Usage

Cambio problemático

No problemático

Motivo

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

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

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