Перегрузки строковых параметров URI вызывают перегрузки System.Uri
Обновлен: Ноябрь 2007
TypeName |
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) { }
};
}
Связанные правила
Передавать объекты System.Uri вместо строк
Свойства URI не должны быть строками