【发布时间】:2010-04-16 02:48:11
【问题描述】:
我想检查一些关于会话状态、用户代理等的事情,并可能在控制器方法有机会执行之前采取行动并返回一个特殊视图。例如:
最常见的:
用户请求 首页/索引
系统检查以确保 x != 0。
x 不等于 0,因此 Home/Index 控制器正常执行。
但是,有时:
用户请求 首页/索引
系统检查以确保 x != 0。
x 等于零。必须通知用户并且不允许执行请求的控制器操作。
我认为这涉及到 ActionFilters 的使用。但是我已经阅读了它们,我不明白我是否可以抢占控制器方法并在它执行之前返回一个视图。我确信我可以在控制器方法运行之前执行代码,但是如何防止它在某些情况下运行并返回自定义视图,或者直接到不同的控制器方法?
更新:我实施了 RM 的解决方案。这就是我所做的:
public class MyAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (myValue == wrongValue)
{
filterContext.Result = new ViewResult{ViewName = "Notice"};
}
base.OnActionExecuting(filterContext);
}
}
现在,当 myValue 错误时,这些用户将获得通知视图,并且请求的控制器永远不会执行。为了完成这项工作,我将它应用到了我的所有控制器都继承自的 ControllerBase。
【问题讨论】:
-
嘿克里斯。告诉我你是怎么做的?
标签: asp.net-mvc