我有一个带有OnActionExecuted
一些代码的方法的基本控制器。
我想对该方法检查过滤器OnActionExecuting
。
更改会带来性能问题吗?
首先,(无论性能如何)您都应使用适合您情况的方法。如果要在执行action方法之前执行执行,请使用OnActionExecuting
。如果要在执行动作后执行执行,请使用OnActionExecuted
。
至于性能,它们应该完全相同。控制器提供了两个空的虚拟方法供您在自己的控制器中实现(此处不涉及性能):
protected virtual void OnActionExecuting(ActionExecutingContext filterContext)
{
}
protected virtual void OnActionExecuted(ActionExecutedContext filterContext)
{
}
如果查看MVC源代码(请参见下面的代码示例),则可以看到在调用操作之前ControllerActionInvoker
简单地调用OnActionExecuting(preContext)
方法,然后OnActionExecuted(postContext)
在操作完成之后(或引发异常时)调用:
internal static ActionExecutedContext InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func<ActionExecutedContext> continuation)
{
filter.OnActionExecuting(preContext);
...
try
{
postContext = continuation();
}
catch (ThreadAbortException)
{
...
filter.OnActionExecuted(postContext);
throw;
}
catch (Exception ex)
{
...
filter.OnActionExecuted(postContext);
if (!postContext.ExceptionHandled)
{
throw;
}
}
if (!wasError)
{
filter.OnActionExecuted(postContext);
}
return postContext;
}
我相信OnActionExecuting
和OnActionExecuted
方法都将被调用,即使它被调用为空(非覆盖)方法,因此性能也不是问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句