共用方式為


CA1057:字串 URI 多載呼叫 System.Uri 多載

型別名稱

StringUriOverloadsCallSystemUriOverloads

CheckId

CA1057

分類

Microsoft.Design

中斷變更

中斷

原因

型別所宣告的方法多載會因以 System.Uri 參數取代字串參數而有所不同,但採用字串參數的多載不會呼叫採用 Uri 參數的多載。

規則描述

因為多載只有字串/Uri 參數的差異,因此會假設字串是表示統一資源識別元 (URI)。 URI 的字串表示方式容易發生剖析和編碼錯誤,並且可能因此產生安全性弱點。 Uri 類別以安全的方式提供這些服務。 若要享有 Uri 類別的優點,字串多載應該使用字串引數呼叫 Uri 多載。

如何修正違規

重新實作使用以字串表示之 URI 的方法,讓它能建立使用字串當做引數之 Uri 類別的執行個體,再傳遞 Uri 物件至具有 Uri 參數的多載。

隱藏警告的時機

如果字串參數不代表 URI,則您可以放心地隱藏這項規則的警告。

範例

在下列範例中,程式碼會顯示正確實作的字串多載。

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

相關規則

CA2234:必須傳遞 System.Uri 物件,而不要傳遞字串

CA1056:URI 屬性不應該為字串

CA1054:URI 參數不應該為字串

CA1055:URI 傳回值不應該為字串