Webapi Dynami c проверки - PullRequest
       22

Webapi Dynami c проверки

1 голос
/ 10 февраля 2020

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

Скажем, у меня есть следующая модель:

public class EventDataForms
{
    public int Field_ID { get; set; }
    public string Field_Type { get; set; }

    public string Field_data_Type { get; set; }

    public int Field_Min_Length { get; set; }
    public int Field_Max_Length { get; set; }


    public string Field_Name { get; set; }


    public string Field_Description { get; set; }
    public int Field_Order { get; set; }
    public Boolean Required_flag { get; set; }
    public int Event_Form_ID { get; set; }
    public int CategoryID { get; set; }
    public int Event_ID { get; set; }
    public DateTime Created_Date { get; set; }
    public string Created_by { get; set; }
    public string Options { get; set; }

}

Когда приходит запрос POST, мне нужно сделать вызов для получения определенных требований к передаваемому Field_Name

Field_data_Type = 'String'

Field_Name = 'Имя';

Field_data_Type = 'String'

>Field_Name = 'Last Name';


Field_data_Type = 'Email'

Field_Name = 'Email';

Field_data_Type = 'String'

Field_Name = 'Gender';

Field_data_Type = 'numeric'

Field_Name = 'Age';

Field_data_Type = 'String'

Field_Name = 'Какой у вас размер футболки';

Field_data_Type = 'numeric'

Field_Name = 'PhoneNumber';

Field_data_Type = 'numeric'

Field_Name = 'Zipcode';

Field_data_Type = 'String'

Field_Name = 'Street Address';

Field_data_Type = 'String'

Field_Name = 'Country';

Field_data_Type = 'String'

Field_Name = 'State';

я хочу динамические c проверки для этих полей .. можно любое выручить меня?

1 Ответ

0 голосов
/ 10 февраля 2020

MVC имеет крючок для предоставления вашего собственного ModelValidatorProvider. По умолчанию MVC 2 использует подкласс ModelValidatorProvider, называемый DataAnnotationsModelValidatorProvider, который может использовать атрибуты System.DataAnnotations.ComponentModel.ValidationAttribute для проверки.

DataAnnotationsModelValidatorProvider использует для поиска все еще, так же, как и для поиска, что и другое. Коллекция для проверки ваших моделей. Все, что вам нужно сделать, это переопределить метод GetValidators и внедрить ваши собственные атрибуты из любого выбранного вами источника. Я использую эту технику для проверки соглашения, свойства с атрибутом DataType.Email всегда передаются через регулярное выражение, и использую эту технику для извлечения информации из базы данных, чтобы применить более ограничительные проверки для «неопытных» пользователей.

В следующем примере просто сказано «всегда вводите любые свойства FirstName».

public class CustomMetadataValidationProvider : DataAnnotationsModelValidatorProvider
{
 protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
    //go to db if you want
    //var repository = ((MyBaseController) context.Controller).RepositorySomething;

    //find user if you need it
    var user = context.HttpContext.User;

    if (!string.IsNullOrWhiteSpace(metadata.PropertyName) && metadata.PropertyName == "FirstName")
        attributes = new List<Attribute>() {new RequiredAttribute()};

    return base.GetValidators(metadata, context, attributes);
 }
}

Все, что вам нужно сделать, это зарегистрировать провайдера в файле Global.asax.cs:

protected void Application_Start()
{
    ModelValidatorProviders.Providers.Add(new CustomMetadataValidationProvider());

    AreaRegistration.RegisterAllAreas();

    RegisterRoutes(RouteTable.Routes);
}
...