【发布时间】:2017-12-17 18:16:11
【问题描述】:
我正在处理我的 ASP.NET Core Web 应用程序中的过滤器属性,它将验证输入模型参数。我需要将一些输入参数与 SQL DB 中的另一个值进行比较。在过滤器中打开数据库连接是一种好习惯吗?
【问题讨论】:
-
没有明显的反对理由
我正在处理我的 ASP.NET Core Web 应用程序中的过滤器属性,它将验证输入模型参数。我需要将一些输入参数与 SQL DB 中的另一个值进行比较。在过滤器中打开数据库连接是一种好习惯吗?
【问题讨论】:
过滤器属性非常适合跨多个操作方法和/或控制器捕获横切关注点。如果是这种情况,那么使用过滤器属性是一个不错的方法。
实际上,过滤器只是请求处理管道中的另一个步骤,就像调用操作方法的步骤一样。所以基本上,在幕后,无论您是在过滤器还是在操作方法中执行验证都没有区别。
几个注意事项:
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
【讨论】: