使用Filter属性中的数据库

时间:2017-12-17 18:16:12

标签: c# asp.net

我正在ASP.NET核心Web应用程序中处理过滤器属性,该属性将验证输入模型参数。我需要将一些输入参数与SQL DB中的另一个值进行比较。在过滤器内打开数据库连接是不错的做法?

1 个答案:

答案 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