Sdílet prostřednictvím


CA2234: Předejte objekty System.Uri namísto řetězců

TypeName

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

Kategorie

Microsoft.Usage

Narušující změna

Nenarušující

Příčina

Dochází k volání metody u parametru, jehož název obsahuje "uri", "Uri", "urn", "Urn", "url" nebo"Url"; a deklarující typ metody obsahuje odpovídající přetížení metody, která obsahuje parametr Uri.

Popis pravidla

Název parametru je rozdělen do tokenů založených na způsobu CamelCase (psaní víceslovných názvů neoddělených mezerami) a poté je každý token zkontrolován, zda se nerovná "uri", "Uri", "urn", "Urn", "url" nebo "Url".Pokud nastane shoda, je parametr považován za představitele identifikátoru URI (uniform resource identifier).Řetězcová reprezentace identifikátoru URI je náchylná k chybám analýzy a kódování a může vést k ohrožení bezpečnosti.Třída Uri poskytuje tyto služby bezpečným a zabezpečeným způsobem.Při volbě mezi dvěma přetížení, která se liší pouze o reprezentací identifikátoru URI, měl by uživatel vybrat přetížení, které přebírá argument Uri.

Jak vyřešit porušení

Pro napravení porušení tohoto pravidla je zapotřebí zavolat přetížení, které přebírá argument Uri.

Kdy potlačit upozornění

Je bezpečné potlačit upozornění tohoto pravidla, pokud řetězec parametru nepředstavuje identifikátor URI.

Příklad

Následující příklad ukazuje metodu, ErrorProne, která porušuje pravidlo a metodu, SaferWay, který správně volá přetížení 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) {}
      }
   };
}

Související pravidla

CA1057: Řetězcové přetížení identifikátoru URI volá přetížení System.Uri

CA1056: Vlastnosti identifikátoru URI by neměly být řetězce

CA1054: Parametry identifikátoru URI by neměly být řetězce

CA1055: Návratové hodnoty identifikátoru URI by neměly být řetězce