【问题标题】:Working with the database inside Filter attribute在 Filter 属性中使用数据库
【发布时间】:2017-12-17 18:16:11
【问题描述】:

我正在处理我的 ASP.NET Core Web 应用程序中的过滤器属性,它将验证输入模型参数。我需要将一些输入参数与 SQL DB 中的另一个值进行比较。在过滤器中打开数据库连接是一种好习惯吗?

【问题讨论】:

  • 没有明显的反对理由

标签: c# asp.net


【解决方案1】:

过滤器属性非常适合跨多个操作方法和/或控制器捕获横切关注点。如果是这种情况,那么使用过滤器属性是一个不错的方法。

实际上,过滤器只是请求处理管道中的另一个步骤,就像调用操作方法的步骤一样。所以基本上,在幕后,无论您是在过滤器还是在操作方法中执行验证都没有区别。

几个注意事项:

  • 实现异步过滤器。这样就可以await进行DB操作,避免阻塞请求线程。同样,正是出于这个原因,您需要实现 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

【讨论】:

    猜你喜欢
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 2019-06-26
    • 2013-08-15
    • 1970-01-01
    相关资源
    最近更新 更多