使用Filter属性中的数据库

问题描述 投票:0回答:1

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

c# asp.net
1个回答
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

© www.soinside.com 2019 - 2024. All rights reserved.