我正在ASP.NET核心Web应用程序中处理过滤器属性,该属性将验证输入模型参数。我需要将一些输入参数与SQL DB中的另一个值进行比较。在过滤器内打开数据库连接是不错的做法?
过滤器属性适用于跨多个操作方法和/或控制器捕获跨领域问题。如果是这种情况,那么使用过滤器属性是一个很好的方法。
实际上,过滤器只是请求处理管道中的另一个步骤,就像调用操作方法的步骤一样。所以基本上,无论是在过滤器还是在action方法中执行验证,都没有区别。
几个注意事项:
await
进行数据库操作,并避免阻塞请求线程。再次,正是因为这个原因,你将实现一个async
动作。异步过滤器的一个例子,引自Microsoft Docs on ASP.NET Core filters
public class SampleAsyncActionFilter : IAsyncActionFilter
{
public async Task OnActionExecutionAsync(
ActionExecutingContext context,
ActionExecutionDelegate next)
{
// do something before the action executes
var resultContext = await next();
// do something after the action executes; resultContext.Result will be set
}
}
另见这个答案中的链接:https://stackoverflow.com/a/40718992/4544845