Condividi tramite


CA1057: Gli overload URI dei valori di stringa chiamano gli overload System.Uri

TypeName

StringUriOverloadsCallSystemUriOverloads

CheckId

CA1057

Category

Microsoft.Design

Breaking Change

Non sostanziale

Causa

Un tipo dichiara overload di metodo che differiscono solo per la sostituzione di un parametro di stringa con un parametro System.Uri e l'overload che accetta il parametro di stringa non chiama l'overload che accetta il parametro Uri.

Descrizione della regola

Poiché gli overload differiscono solo per il parametro di stringa oUri, si presuppone che la stringa rappresenti un URI (Uniform Resource Identifier). Una rappresentazione in forma di stringa di un URI è soggetta a errori di analisi e codifica e può creare vulnerabilità nella sicurezza. La classe Uri fornisce questi servizi in un modo sicuro e protetto. Per usufruire dei vantaggi della classe Uri, l'overload della stringa deve chiamare l'overload Uri utilizzando l'argomento stringa.

Come correggere le violazioni

Reimplementare il metodo che utilizza la rappresentazione di stringa dell'URI in modo che crei un'istanza della classe Uri utilizzando l'argomento stringa, quindi passi l'oggetto Uri all'overload che presenta il parametro Uri.

Esclusione di avvisi

L'esclusione di un avviso da questa regola è sicura se il parametro di stringa non rappresenta un URI.

Esempio

Nell'esempio riportato di seguito viene illustrato un overload di stringa implementato correttamente.

Imports System

Namespace DesignLibrary

   Public Class History

      Sub AddToHistory(uriString As String)
          Dim newUri As New Uri(uriString)
          AddToHistory(newUri)
      End Sub

      Sub AddToHistory(uriType As Uri)
      End Sub

   End Class

End Namespace
using System;

namespace DesignLibrary
{
   public class History
   {
      public void AddToHistory(string uriString)
      {
          Uri newUri = new Uri(uriString);
          AddToHistory(newUri);
      }

      public void AddToHistory(Uri uriType) { }
   }
}
#using <system.dll>
using namespace System;

namespace DesignLibrary
{
   public ref class History
   {
   public:
      void AddToHistory(String^ uriString)
      {
          Uri^ newUri = gcnew Uri(uriString);
          AddToHistory(newUri);
      }

      void AddToHistory(Uri^ uriType) { }
   };
}

Regole correlate

CA2234: Passare oggetti System.Uri invece di stringhe

CA1056: Le proprietà URI non devono essere stringhe

CA1054: I parametri URI non devono essere stringhe

CA1055: I valori restituiti URI non devono essere stringhe