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