[英]How to handle null Model on all controllers aspnet core c#
我为我的Web api设置了许多模型,没有一个模型具有针对它们的任何属性。 这是一个简单的控制器示例
public async Task<IActionResult> PutAsync([FromBody] ChartModel model)
{
....
}
现在,如果用户尝试上载模型中的无效数据类型,例如,在数字属性中键入字母,则我的控制器将接收到null。
最好的,最简单的方法是什么? 如果这些特定方法的模型为null,我想返回BadRequest。
我可以在每种方法中添加以下内容。
if (model == null)
return new BadRequestObject("Invalid model");
但我敢肯定,我必须做些更清洁,更整洁的事情,我只是不知道
你可以做这样的事情
public class ValidateModelAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(HttpActionContext actionContext)
{
var modelState = actionContext.ModelState;
if (!modelState.IsValid)
{
actionContext.Response = actionContext.Request.CreateErrorResponse(
HttpStatusCode.NotAcceptable, modelState);
}
}
}
然后在控制器方法上使用它
[ValidateModel]
public async Task<IActionResult> PutAsync([FromBody] ChartModel model)
{
// your code goes here
}
并且您不必每次都在代码中检查ModelState是否有效。
正在执行的是实现ActionFilter属性,在执行方法之前进行检查,如果发现任何无效参数,则返回错误响应。
例如,此(.NET 4.5代码!)如果发现ANY,将返回BadRequest! 参数为空。
public class ParamCheck : ActionFilterAttribute
{
public override void OnActionExecuting(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var args = actionContext.ActionArguments;
if (args.Any(arg => arg.Value == null))
actionContext.Response = actionContext.Request.CreateErrorResponse(HttpStatusCode.BadRequest, "Null params");
else
base.OnActionExecuting(actionContext);
}
}
然后只需使用ActionFilter装饰您的方法或在全局范围内注册它。
[HttpGet]
[ParamCheck]
public HttpResponseMessage Test(SummarySyncParams pars)
{}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.