asp.net-mvc – 如何获取某些代码在ASP.NET MVC 2中的每个单个控制器操作之前执行?
|
我想检查一些关于会话的状态,用户代理等的状态,并且可能采取行动并在控制器方法获得执行机会之前返回一个特殊的视图。例如: 最常见的: 但是有时: 我认为这涉及使用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。 解决方法所有取决于你想要做什么,以及如何。以下三个选项:您可以为此使用路由约束。它们在评估匹配的路由时执行。 routes.MapRoute(
"HomeWithConstraint","Home/{action}",new {controller="Home",action="index"},new { x = new MyCustomRouteConstraint () }
);
// without constraint,i.e. if above didnt pass
routes.MapRoute(
"HomeWithConstraint",action="index"}
);
上面的MyCustomRouteConstraint类型将检查您的示例中的x == 0等。不确定您想要做什么,但这将允许您在运行之前检查条件并设置其他路由值等。 有关自定义路由约束的示例,请参阅here。 或者,您可以使用自定义ActionFilter,只需将其应用于控制器类,并且在执行任何操作之前将被调用。就像是: public class CheckXActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if(x == 0)
{
// do something
// e.g. Set ActionParameters etc
}
else
{
// do something else
}
}
}
另一个选项是让所有的控制器(或相关的)继承自定制的控制器,并覆盖: OnActionExecuting 详见here。 要做与过滤器相同的,或路由约束。 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-core – 如何注入对特定IHostedService实现的引用?
- asp.net-mvc – asp.net mvc ajax post – redirecttoactio
- asp.net – 无法加载类型’system.data.entity.design.aspn
- asp.net-mvc – @ Html.Action in Asp.Net Core
- 每个“HttpRequest”在ASP.NET中都有自己的线程吗?
- asp.net – 命名Dom元素的Id属性的最佳实践
- 如何防止我的asp.net网站被屏幕刮掉?
- asp.net-mvc – ASP MVC区域和ActionLink
- asp.net – 配置转换和“TransformXml任务失败”错误消息
- 如何在ASP.NET MVC中禁用HTTP Keep-Alive?
