Что проверяет datatype.text? - PullRequest
       2

Что проверяет datatype.text?

0 голосов
/ 20 декабря 2018

У меня есть производственное приложение, которое проверяется нашими сканированиями безопасности для CWE-100 .Я знаю, что это устаревший элемент, однако он все еще отображается в моем отчете.

В настоящий момент я вижу только два действия:

  1. Обработка каждого элемента и устранение недостатка в отчете
  2. Отметьте недостаток и прокомментируйте, что этоустарела и иди поговори с моей службой безопасности.

Что касается его исправления, я обнаружил, что добавление атрибута типа данных в переменную сняло предупреждение.Вот фрагмент исправлений, которые я исправил

[DataType(DataType.Text)]
public string Name { get; set; }
...
[DataType(DataType.Text)]
[Required(ErrorMessage = "Please enter documentation.")]
public string Documentation{ get; set; }

Я не смог найти никакой документации от Microsoft о том, с чем этот атрибут типа данных проверяется.Если это произойдет, то, как при небольшом тестировании, я все еще могу ввести любой символ, который я скопирую, в текстовое поле, которое я для этого отображаю.

Есть ли причина для добавления этого атрибута, или я потратил бы впустую свое время?

1 Ответ

0 голосов
/ 21 декабря 2018

Отказ от ответственности : Это мое понимание того, что чтение исходного кода (не стесняйтесь меня поправлять)

( DataTypeAttribute )ValidationAttribute (получено из ValidationAttribute), и вам необходимо передать ему Enum (также называемый DataType).

Атрибуты проверки необходимо переопределить IsValid метод, который выполняется на привязке модели, и необходимо определить, является ли значение допустимым или нет.Вот как должен выглядеть пользовательский валидатор:

public class CustomValidator : ValidationAttribute  
{  
    protected override ValidationResult IsValid(object value, ValidationContext validationContext)  
    {  
        // do some validation

        if (/* validation passes */)
        {
            return ValidationResult.Success;  
        }
        else 
        {
            return new ValidationResult("Validation message..."); 
        }
    }  
}  

Теперь, возвращаясь к DataTypeAttribue (который является атрибутом валидации), вам нужно передать его DataType enum:

public enum DataType
{
    Custom = 0,
    DateTime = 1,
    Date = 2,
    Time = 3,
    Duration = 4,
    PhoneNumber = 5,
    Currency = 6,
    Text = 7,
    Html = 8,
    MultilineText = 9,
    EmailAddress = 10,
    Password = 11,
    Url = 12,
    ImageUrl = 13,
    CreditCard = 14,
    PostalCode = 15,
    Upload = 16
}

Из того, что я вижу, все, что DataTypeAttribtue делает, это добавляет некоторое форматирование для DataType.Date, DataType.Time и DataType.Currency ... (также установите _dataTypeStrings)

Более того, у вас есть атрибуты проверки, такие как EmailAddressAttribute , PhoneAttribute , UrlAttribute и т. Д., Которые получены из DataTypeAttribute и выполняют дополнительную проверку для этих конкретных типов:

Теперь вот как вы можете использовать эти атрибуты проверки:

public class MyModel
{
    [Phone] // <- executes the IsValid method of PhoneAttribute
    public String Home { get; set; }

    [DataType(DataType.PhoneNumber)] // <- does NOT execute IsValid method of PhoneAttribute
    public String Mobile { get; set; }

    [EmailAddress] // <- executes the IsValid method of EmailAddressAttribute
    public String Email { get; set; }

    [DataType(DataType.Currency)] // <- does the Currency formatting
    public decimal Price { get; set; }

    [DataType(DataType.Date)]  // <- does the Date formatting
    public DateTime ReleaseDate { get; set; }

    [DataType(DataType.Text)] // <- does NOT add any validation/formatting
    public string Name { get; set;}

    /*
     * this is the only scenario that I can think of, for using: [DataType(DataType.Text)]
     */
    [DataType(DataType.Text)] 
    public object someKey { get; set;}

}

Опять же, насколько я понимаю, добавление [DataType(DataType.Text)] к string не добавляет никакого значения, иЛучше не использовать его, чтобы код был меньше, чище и легче для понимания ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...