Атрибут BindRequired для всех параметров действия

В действии контроллера, когда вы добавляете атрибут [BindRequired] к параметру, он делает этот параметр обязательным. Но если у вас есть несколько параметров, это становится очень подробным. Есть ли способ иметь что-то подобное на уровне действия?

Вы хотите избежать записи атрибута BindRequired для столбцов вызова?

Sats 21.12.2020 03:55

@SatishPai Напротив, я хочу, чтобы что-то подобное вызывало все параметры действия, не добавляя его к каждому действию. Что-то вроде атрибута, который делает то же самое, но применяется к действию.

Emily 21.12.2020 13:17
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
2
1 278
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Один из способов — создать модель и присвоить ей все параметры, как показано ниже:

public class Test
{
    [BindRequired]
    public string Id { get; set; }
    [BindRequired]
    public string Name { get; set; }
    //other property...
}

Контроллер:

public void Post([FromQuery] Test model)
{
     // return statement
}

Адрес запроса: https://localhost:portNumber/api/values?id=1&name=aa

Другой способ - настроить фильтр пользовательских действий, как показано ниже:

public class MyActionFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        var keylist = new string[] { "id", "name" };
        var keys = context.HttpContext.Request.Query.Keys;
        foreach(var item in keylist)
        {
            if (!keys.Contains(item))
            {
                context.ModelState.AddModelError(item, $"The {item} need to be provided");
            }
        }
        if (!context.ModelState.IsValid)
        {
            context.Result = new BadRequestObjectResult(
                                                context.ModelState);
        }
    }

}

Контроллер:

[HttpPost]
[MyActionFilter]
public void Post(string id,string name)
{
    // return statement
}

Другие вопросы по теме