Udostępnij za pośrednictwem


CA2234: Przekaż obiekty System.Uri zamiast ciągów

TypeName

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

Kategoria

Microsoft.Usage

Zmiana kluczowa

Niekluczowa

Przyczyna

Wystąpiło wywołanie do metody, która ma jako parametr ciąg, którego nazwa zawiera "uri", "Uri", "urn", "Urn", "url" lub "Url"; a deklarujący metodę typ zawiera odpowiadające przeciążenie metody, która ma parametr Uri.

Opis reguły

Nazwa parametru jest podzielona na podstawie konwencji CamelCase i sprawdzany jest każdy token, aby sprawdzić, czy jest równy "uri", "Uri", "urn", "Urn", "url" lub "Url".Jeżeli zostanie znaleziony zgodny, przyjmuje się że parametr reprezentuje jednolity identyfikator zasobów (URI).Reprezentacja ciągu identyfikatora URI jest podatna na analizowanie i kodowanie błędów i może prowadzić do powstawania luk w zabezpieczeniach.Klasa Uri dostarcza te usługi w bezpieczny sposób.Gdy istnieje wybór pomiędzy dwoma przeciążeniami, które różnią się tylko reprezentacją identyfikatora URI, użytkownik powinien wybrać przeciążenie, które pobiera argument Uri.

Jak naprawić naruszenia

Aby naprawić naruszenie tej zasady, należy wywołać przeciążenie, które pobiera argument Uri.

Kiedy pominąć ostrzeżenia

Można bezpiecznie pominąć ostrzeżenie od tej reguły, jeśli parametr ciągu nie reprezentuje identyfikatora URI.

Przykład

Poniższy przykład ilustruje metodę, ErrorProne, która narusza reguły i metody, SaferWay, która wywołuje poprawnie przeciążenie 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) {}
      }
   };
}

Powiązane reguły

CA1057: Przeciążenia identyfikatora URI, który jest ciągiem, wywołują przeciążenia System.Uri

CA1056: Właściwości identyfikatora URI nie powinny być ciągami

CA1054: Parametry identyfikatora URI nie powinny być ciągami

CA1055: Wartości zwracane identyfikatora URI nie powinny być ciągami