【发布时间】:2018-09-13 18:15:17
【问题描述】:
我的 API 只有 POST 操作方法。我想创建一个库来验证我的 API 的输入。现在我想在点击控制器操作方法之前进行此验证。
我已经决定使用中间件方式 -
public class ValidateInputMiddleware
{
private readonly RequestDelegate _next;
public ValidateInputMiddleware(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext httpContext)
{
//read the request body
//serialize the json body to input model
//validations
if(reqJsonObj.Id == null)
//return response - id is null
//other validations
await _next(httpContext);
}
}
如果满足我的验证条件,那么我不希望管道中的其他项目执行。
我需要帮助 -
如何限制管道中的其他项目执行。
如何以 JSON 的形式返回自定义错误响应。
【问题讨论】:
-
为什么不使用 ModelState? docs.microsoft.com/en-us/aspnet/core/mvc/models/validation
-
@illug 这不是我老板想做的:(
-
买一个新的。尽快! :)
-
不要为此使用中间件,这太低级了。请改用action filter。
-
不想使用模型状态的真正原因是什么?我可以理解它是否有时可能不够灵活(尽管通用过滤器/中间件也无法解决),但我认为这实际上只是一个没有受过教育的决定,所以你可能不应该满足于在真正考虑解决问题的正确方法之前。
标签: c# validation asp.net-core-2.0 asp.net-core-middleware