Compartilhar via


CA2234: passar objetos System.Uri em vez de cadeias de caracteres

TypeName

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

Categoria

Microsoft.Usage

Alteração Significativa

Sem Quebra

Causa

For feita uma chamada para um método que possui um parâmetro de cadeia de caracteres cujo nome contém “uri”, “Uri”, “urn”, “urn”, “URL”, ou “URL”; declarando e o tipo de método contém uma sobrecarga correspondente do método que possui um parâmetro de Uri .

Descrição da Regra

Um nome de parâmetro é dividido em tokens com base na convenção de uso de maiúsculas e minúsculas em camelo, e cada token é verificado em para verificar se é igual a “uri”, “Uri”, “urn”, “urn”, “URL”, ou “URL”.Se houver uma correspondência, o parâmetro será assumido para representar o Uniform Resource Identifier (URI).Uma representação de cadeia de caracteres de um URI for susceptível a erros de análise e de codificação, e pode resultar em vulnerabilidades de segurança.A classe de Uri fornece estes serviços em um cofre e uma maneira segura.Quando há uma escolha entre duas sobrecargas que diferem apenas em relação à representação de um URI, o usuário deve escolher a sobrecarga que usa um argumento de Uri .

Como Corrigir Violações

Para corrigir uma violação desta regra, chame a sobrecarga que usa o argumento de Uri .

Quando Suprimir Alertas

É seguro suprimir um aviso dessa 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, chamada corretamente a sobrecarga de Uri .

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

CA1057: as sobrecargas de URI da cadeia de caracteres chamam sobrecargas System.Uri

CA1056: as propriedades de URI não devem ser cadeias de caracteres

CA1054: os parâmetros de URI não devem ser cadeias de caracteres

CA1055: os valores de retorno de URI não devem ser cadeias de caracteres