Condividi tramite


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

Aggiornamento: novembre 2007

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 di stringa di un URI è soggetta a errori di analisi e codifica e può creare punti di vulnerabilità della protezione. 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.

Correzione di 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

Passare oggetti System.Uri invece di stringhe

Le proprietà URI non devono essere stringhe

I parametri URI non devono essere stringhe

I valori restituiti URI non devono essere stringhe