如何处理所有控制器上的 null 模型 aspnet core c#

Gil*_*rdo 3 .net c# asp.net asp.net-web-api

我为我的 Web api 设置了很多模型,但没有一个模型具有针对它们的任何属性。这是一个简单的控制器示例

public async Task<IActionResult> PutAsync([FromBody] ChartModel model)
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

现在,如果用户尝试在模型中上传无效数据类型(例如,在数字属性中键入字母),那么我的控制器会收到 null。

处理这个问题最好、最简单的方法是什么?如果这些特定方法的模型为 null,我想返回 BadRequest。

我可以向每个方法添加如下所示的内容。

if (model == null)
    return new BadRequestObject("Invalid model");
Run Code Online (Sandbox Code Playgroud)

但我确信一定有一些我可以做的事情,而且更干净整洁,我只是不知道是什么

Jaw*_*ngh 5

你可以做这样的事情

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在控制器方法之上使用它

[ValidateModel]
public async Task<IActionResult> PutAsync([FromBody] ChartModel model)
{
     // your code goes here
} 
Run Code Online (Sandbox Code Playgroud)

并且您不必每次都在代码中检查 ModelState 是否有效。