.net core 避免在 controller/action 中重复 ModelState
.net core Avoid repeating ModelState in controller/action
我在 .net 核心 2.x 项目中工作。
我在每个动作中都写了下面的代码来验证我的模型状态。
if (ModelState.IsValid)
{
// Do something
}
else
{
// Return Modelstate Error
}
我想知道避免在每个操作中重复条件的最佳做法是什么。
我想在到达操作之前验证模型状态,如果模型状态无效,则 return 适当的错误消息。
更新
注意。我的操作很简单 Api 操作,我只想 return 错误(在我的模型中)以字符串数组的形式出现在 HttpContext 主体中。
模型示例 属性。
[Required(ErrorMessage = "Fill the name Please !!!")]
public string FirstName { get; set; }
行动示例。
[HttpPost]
public void Create([FromBody]MyModel model)
{
if (ModelState.IsValid)
{
// Do something
}
else
{
// Return Modelstate Error
}
}
尝试这样的事情
public class ModelStateValidationFilter : ActionFilterAttribute
{
public string ErrorPage;
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
//return error result
List<string> list = (from modelState in context.ModelState.Values from error in modelState.Errors select error.ErrorMessage).ToList();
context.Result = new BadRequestObjectResult(list);
//or redirect to some result
context.Result = new RedirectToRouteResult(ErrorPage);
//or do whatever you need
}
base.OnActionExecuting(context);
}
}
然后像这样添加
在控制器上
[ModelStateValidationFilter(ErrorPage = "somepage")]
public class SomeController : Controller
正在行动
[ModelStateValidationFilter(ErrorPage = "somepage")]
public IActionResult SomeAction(somemodel model)
或通过启动添加到所有
我在 .net 核心 2.x 项目中工作。 我在每个动作中都写了下面的代码来验证我的模型状态。
if (ModelState.IsValid)
{
// Do something
}
else
{
// Return Modelstate Error
}
我想知道避免在每个操作中重复条件的最佳做法是什么。 我想在到达操作之前验证模型状态,如果模型状态无效,则 return 适当的错误消息。
更新
注意。我的操作很简单 Api 操作,我只想 return 错误(在我的模型中)以字符串数组的形式出现在 HttpContext 主体中。
模型示例 属性。
[Required(ErrorMessage = "Fill the name Please !!!")]
public string FirstName { get; set; }
行动示例。
[HttpPost]
public void Create([FromBody]MyModel model)
{
if (ModelState.IsValid)
{
// Do something
}
else
{
// Return Modelstate Error
}
}
尝试这样的事情
public class ModelStateValidationFilter : ActionFilterAttribute
{
public string ErrorPage;
public override void OnActionExecuting(ActionExecutingContext context)
{
if (!context.ModelState.IsValid)
{
//return error result
List<string> list = (from modelState in context.ModelState.Values from error in modelState.Errors select error.ErrorMessage).ToList();
context.Result = new BadRequestObjectResult(list);
//or redirect to some result
context.Result = new RedirectToRouteResult(ErrorPage);
//or do whatever you need
}
base.OnActionExecuting(context);
}
}
然后像这样添加
在控制器上
[ModelStateValidationFilter(ErrorPage = "somepage")]
public class SomeController : Controller
正在行动
[ModelStateValidationFilter(ErrorPage = "somepage")]
public IActionResult SomeAction(somemodel model)
或通过启动添加到所有