![](/img/trans.png)
[英]Returns from OnActionExecutionAsync without executing the action in asp.net core
[英]How to use OnActionExecutionAsync in ASP.NET Core
如何覆盖此方法?
假设这样的继承图。
FeatureController : BaseController : Controller { }
我想在执行之前和执行之后运行代码,并在FeatureController
和BaseController
中都这样做。
这令人困惑,因为有两件事情需要等待。
await base.OnActionExecutionAsync(context, next);
和
await next();
我不清楚如何正确使用此虚拟机。
Controller
本身是Action Fitler的实现。 OnActionExecutionAsync()
和next()
在过滤器管道中的不同级别上运行:
await base.OnActionExecutionAsync(context, next);
将调用父级的OnActionExecutionAsync(context,next)
,从而按顺序执行以下操作:
OnActionExecuting(executingContext)
OnActionExecuted(executedContext)
await next();
只会调用动作主体本身。 简而言之,它们都调用了动作主体,但是base.OnActionExecutionAsync(ctx,next)
也会触发钩子(即OnActionExecuting(executingCtx)
和OnActionExecuted(executedCtx)
)
最后(至少到目前为止),我最终使用Async虚拟来执行I / O和异步工作,然后将任何有趣的结果保存到字段中。
然后,我像以前一样使用旧的同步虚拟机。 然后,它们会参考字段中逻辑所需的任何状态。 即使我不确定它的正确方法,也可以解决问题。
作为背景,我要解决的问题是将项目添加到包含主要导航链接的列表中。 我希望先添加一些基本的站点范围链接,然后再请求页面的上下文链接,然后再完成一些站点范围的链接。
真正的三明治三明治。 好吃
可以说我的解决方案可以通过使用合成而不是继承来进行改进,即将三明治制作器(如Breville)注入到我的所有控制器中,并且在基本控制器中不添加此控件,从而避免了基于基点与基点的协调。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.