Freigeben über


CA2234: Übergeben Sie System.Uri-Objekte anstelle von Zeichenfolgen

TypeName

PassSystemUriObjectsInsteadOfStrings

CheckId

CA2234

Kategorie

Microsoft.Usage

Unterbrechende Änderung

Nicht unterbrechend

Ursache

Eine Methode wird aufgerufen, die einen Zeichenfolgenparameter besitzt, dessen Name "uri", "Uri", "urn", "Urn", "url" oder "Url" enthält. Der deklarierende Typ der Methode enthält eine entsprechende Methodenüberladung, die über einen System.Uri-Parameter verfügt.

Regelbeschreibung

Ein Parametername wird entsprechend der Kamel-Schreibweise in Token aufgeteilt. Anschließend wird jedes Token daraufhin überprüft, ob es "uri", "Uri", "urn", "Urn", "url" oder "Url" entspricht. Wenn es eine Übereinstimmung gibt, wird angenommen, dass der Parameter einen Uniform Resource Identifier (URI) darstellt. Eine Zeichenfolgendarstellung eines URIs ist anfällig für Analyse- und Codierungsfehler und kann zu Sicherheitsmängeln führen. Von der Uri-Klasse werden diese Dienste auf sichere Weise bereitgestellt. Wenn zwischen zwei Überladungen gewählt werden kann, die sich nur hinsichtlich der Darstellung eines URI unterscheiden, sollte der Benutzer die Überladung wählen, die ein Uri-Argument annimmt.

Behandeln von Verstößen

Um einen Verstoß gegen diese Regel zu beheben, rufen Sie die Überladung auf, die das Uri-Argument annimmt.

Wann sollten Warnungen unterdrückt werden?

Eine Warnung dieser Regel kann gefahrlos unterdrückt werden, wenn der Zeichenfolgenparameter keinen URI darstellt.

Beispiel

Das folgende Beispiel zeigt die ErrorProne-Methode, die gegen die Regel verstößt, und die SaferWay-Methode, durch die die Uri-Überladung ordnungsgemäß aufgerufen wird.

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) {}
      }
   };
}

Verwandte Regeln

CA1057: URI-Überladungen vom Typ string rufen Überladungen vom Typ System.Uri auf

CA1056: URI-Eigenschaften dürfen keine Zeichenfolgen sein

CA1054: URI-Parameter dürfen keine Zeichenfolgen sein

CA1055: URI-Rückgabewerte dürfen keine Zeichenfolgen sein.