Passar objetos sistema.URI em vez de seqüências de caracteres

TypeName

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

Category (Categoria)

Microsoft.uso

Quebrando alterar

Não separável

Causa

Uma telefonar é feita para um método que possui um parâmetro de cadeia 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 tenha umSystem.Uri parâmetro.

Descrição da regra

Um nome de parâmetro é dividido em tokens com base no convenção camel casing e, em seguida, cada token está marcada para ver se igual a "uri", "Uri", "urn", "Urn", "url" ou "Url".Se houver uma correspondência, o parâmetro será considerado para representar um identificador de recurso uniforme (URI).Uma representação de seqüência de caracteres de um URI está sujeita a análise e a codificação de erros e pode levar a vulnerabilidades de segurança.The Uri classe fornece esses serviços de maneira segura e protegida. Quando houver uma escolha entre os dois métodos sobrecarregados que diferem apenas em relação a representação de um URI, o usuário deve escolher a sobrecarga que aceita um Uri argumento.

Como corrigir violações

Para corrigir uma violação dessa regra telefonar a sobrecarga que aceita o Uri argumento.

Quando suprimir avisos

É seguro eliminar um aviso essa regra se o parâmetro de cadeia 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

String URI sobrecargas telefonar sistema.URI sobrecargas

Propriedades URI não devem ser seqüências de caracteres

Parâmetros da URI não devem ser seqüências de caracteres

URI retornar valores não devem ser seqüências de caracteres