我正在ASP.NET核心Web应用程序中处理过滤器属性,该属性将验证输入模型参数。我需要将一些输入参数与SQL DB中的另一个值进行比较。在过滤器内打开数据库连接是不错的做法?
答案 0 :(得分:1)
过滤器属性适用于跨多个操作方法和/或控制器捕获跨领域问题。如果是这种情况,那么使用过滤器属性是一个很好的方法。
实际上,过滤器只是请求处理管道中的另一个步骤,就像调用操作方法的步骤一样。所以基本上,无论是在过滤器还是在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