MVC过滤器 OnActionExecuting() 在过滤器中获取触发控制器,Action 等
来源:互联网 发布:网络机柜插座接线图 编辑:程序博客网 时间:2024/04/19 06:36
<1>
将区域的admin区域的Home控制器的Index视图设为默认启动项的路由设置
RouteConfig.cs
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using System.Web.Routing;namespace FB.CMS.MvcSite{ public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }, namespaces: new string[] { "FB.CMS.MvcSite.Areas.admin.Controllers" }//项目中如果存在多个Home控制器,需要设定Home控制器的名称空间 ).DataTokens.Add("area", "admin") //.DataTokens.Add("area","admin")就表示将区域里的admin区域的Home控制器的Index视图设为默认启动项 ; } }}
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;namespace MVC过滤器.Filters{ //自定义一个过滤器 [MyActionFilter] public class MyActionFilterAttribute:ActionFilterAttribute { //重写OnActionExecuting方法 public override void OnActionExecuting(ActionExecutingContext filterContext) { //我们先来了解一下这个filterContext参数:我们知道OnActionExecuting方法是在Action执行之前会被触发执行的一个方法,那就意味着,将来我在这里面写代码,想要知道你这一个OnActionExecuting方法到底是由那一个Action被调用的时候触发的 (因为所有的action方法被执行的时候都会触发OnActionExecuting这个过滤器方法,所以我就像要知道到底是哪个action被执行的时候触发的这个OnActionExecuting方法) //获取触发当前方法(OnActionExecuting)的Action名字(即:哪个Action方法被执行的时候触发的OnActionExecuting(ActionExecutingContext filterContext)) string actionName = filterContext.ActionDescriptor.ActionName; //获取触发当前方法的的Action所在的控制器名字 string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; //获取触发当前方法的Action方法的所有参数(因为参数可能有多个,所以它是一个集合,它的返回值类型是IDictionary<string ,object> 下面为了好看,用var替代) var paramss = filterContext.ActionParameters; string str = ""; if (paramss.Any()) //Any是判断这个集合是否包含任何元素,如果包含元素返回true,否则返回false { foreach (var key in paramss.Keys) //遍历它的键;(因为我们要获取的是参数的名称s,所以遍历键) { str = key + "的值是" + paramss[key]; //paramss[key] 是key的值 } } //获取当前请求的上下文 filterContext.HttpContext.Response.Write("你好,我也好"); //将触发当前方法的这个Action方法的返回结果视图换成一个JsonResult ( filterContext.Result的返回类型就是JsonResult) //filterContext.Result:获取或设置由操作方法返回的结果。(既然是获取或者设置Action方法的返回结果,那么我们就可以在这里篡改触发当前方法的那个Action方法的返回结果 //例如:触发当前方法的Action方法是这个:public ActionResult Add(){return Content("中国");} 这个Action方法的返回值是一个"中国"文本 那么我们在这里可以通过filterContext.Result来篡改它的返回值。比如这我给他返回一个json JsonResult json=new JsonResult(); json.Data=new { status="1",message="OK"}; json.JsonRequestBehavior = JsonRequestBehavior.AllowGet; filterContext.Result = json; //假设我们在MVC项目中添加一个名字为admin的区域,然后再区域下添加一个Home控制器,然后添加一个Index视图。 //那现在我们访问这个视图的路径就是:http://localhost:5219/admin/home/index //获取区域 var area = filterContext.RouteData.DataTokens;//MVC可以有区域的,这里就是负责存放区域的 //获取区域名称 var areaName = area["area"];//这个["area"]是写死了的。你根据["area"]就可以取到区域名称,因为区域的key固定就是area 所以这里areaName的值为admin //RouteData var rd = filterContext.RouteData; //在这里面可以获取控制名称,ation名称,参数名称 var controlName = rd.Values["Controller"].ToString(); var actName = rd.Values["Action"].ToString(); } }}
0 0
- MVC过滤器 OnActionExecuting() 在过滤器中获取触发控制器,Action 等
- MVC中Action过滤器(OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecued)
- MVC 在Action中,过滤器中,或视图中,获取当前请求的 控制器/视图/区域的名字及跳转
- .NET MVC 在action中,过滤器中,或视图中,如何分别获取 当前请求的 控制器/视图/区域 的名字
- angularJs在控制器中使用过滤器实例
- asp.net 过滤器获取action,controller,参数,浏览器版本等
- mvc中OnActionExecuting和 OnAuthorization
- 【spring mvc】Spring MVC配置过滤器并在过滤器中使用bean
- MVC下在控制器与试图中获取当前页面的URL与controller、action
- ASP.NET MVC : Action过滤器(Filtering)
- Mvc全局过滤器与Action排除
- MVC过滤器中获取实体类属性值
- 在控制器中添加过滤器,解决中文由jsp到action进而到数据库传输过程中出现的乱码问题(Struts)
- Asp.net mvc中过滤器
- MVC 过滤器
- MVC 过滤器
- MVC过滤器
- MVC 过滤器
- xcode cmake
- “黑马程序员”正则表达式
- CentOs6.5下的网络配置
- [corefx注释说]-System.Collections.Generic.Stack<T>
- [异能程序员]第一章 酒后事发(第一更)
- MVC过滤器 OnActionExecuting() 在过滤器中获取触发控制器,Action 等
- "黑马程序员"Java IO流
- pceluqjhau
- C++读书笔记——静态与动态绑定
- c++读书笔记——多重继承
- C#中堆和栈的区别分析
- 从Linux 2.6.8内核的一个TSO/NAT bug引出的网络问题排查观点(附一个skb的优化点)
- 极路由3与存储的适配规划
- 虚幻引擎4 DEMO打包下载