ASP.NET MVC ActionFilter [英] ASP.NET MVC ActionFilter
本文介绍了ASP.NET MVC ActionFilter的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果是否即使在catch块执行从ActionFilterAttribute类OnResultExecuted方法有人知道?
例如:
[CookiesActions]
公众的ActionResult登录(USUARIOS usuario)
[...]
返回查看(新UsersViewModel(sceUsuarios.Usuario,真实));
}
抓住
{
返回查看(新UsersViewModel(新USUARIOS(),TRUE)); //在这里OnResultExecuted解雇了吗?
}
[...]
解决方案
在短:是
您可以用一个简单的日志记录动作过滤器验证这一点。
公共类LogAttribute:ActionFilterAttribute
{
公共覆盖无效OnActionExecuting(ActionExecutingContext filterContext)
{
日志(OnActionExecuting,filterContext.RouteData);
} 公共覆盖无效OnActionExecuted(ActionExecutedContext filterContext)
{
日志(OnActionExecuted,filterContext.RouteData);
} 公共覆盖无效OnResultExecuting(ResultExecutingContext filterContext)
{
日志(OnResultExecuting,filterContext.RouteData);
} 公共覆盖无效OnResultExecuted(ResultExecutedContext filterContext)
{
日志(OnResultExecuted,filterContext.RouteData);
}
私人无效日志(字符串methodName中,的RouteData的RouteData)
{
VAR controllerName = routeData.Values [控制器];
VAR actionName = routeData.Values [行动];
VAR消息=的String.Format({0}控制器:{1}行动:{2},方法名,controllerName,actionName);
的Debug.WriteLine(消息,行动过滤日志);
}}
如果你把[日志]属性上你的方法,你会看到OnResultExecuted写入甚至当你吞下例外调试。
Does anybody knows if the OnResultExecuted method from ActionFilterAttribute class is executed even in CATCH block?
ie:
[CookiesActions]
public ActionResult Login(Usuarios usuario)
[...]
return View(new UsersViewModel(sceUsuarios.Usuario,true));
}
catch
{
return View(new UsersViewModel(new Usuarios(),true));//is OnResultExecuted fired here?
}
[...]
解决方案
In short: YES.
You can verify this with a a simple logging action filter.
public class LogAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Log("OnActionExecuting", filterContext.RouteData);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Log("OnActionExecuted", filterContext.RouteData);
}
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Log("OnResultExecuting", filterContext.RouteData);
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Log("OnResultExecuted", filterContext.RouteData);
}
private void Log(string methodName, RouteData routeData)
{
var controllerName = routeData.Values["controller"];
var actionName = routeData.Values["action"];
var message = String.Format("{0} controller:{1} action:{2}", methodName, controllerName, actionName);
Debug.WriteLine(message, "Action Filter Log");
}
}
If you put the [Log] attribute on your method, you'll see that OnResultExecuted is written to debug even when you swallow the exception.
这篇关于ASP.NET MVC ActionFilter的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文