В действии контроллера, когда вы добавляете атрибут [BindRequired] к параметру, он делает этот параметр обязательным. Но если у вас есть несколько параметров, это становится очень подробным. Есть ли способ иметь что-то подобное на уровне действия?
@SatishPai Напротив, я хочу, чтобы что-то подобное вызывало все параметры действия, не добавляя его к каждому действию. Что-то вроде атрибута, который делает то же самое, но применяется к действию.
Один из способов — создать модель и присвоить ей все параметры, как показано ниже:
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
}
Вы хотите избежать записи атрибута BindRequired для столбцов вызова?