MVC过滤器 OnActionExecuting() 在过滤器中获取触发控制器,Action 等

<1>

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;

            //获取区域名称
            var areaName = filterContext.RouteData.DataTokens;//MVC可以有区域的,这里就是获取区域的名称(如果区域存在)

            var rd = filterContext.RouteData; //在这里面可以获取控制名称,ation名称,参数名称
        }
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-27 05:26:09

MVC过滤器 OnActionExecuting() 在过滤器中获取触发控制器,Action 等的相关文章

MVC中获取来自控制器名称与动作的方法

#region 获取控制器名称与动作 protected void GetNameSpace() { var nameSpace = this.RouteData.Values["controller"] + "." + this.RouteData.Values["action"] + "."; ViewBag.NameSpace = nameSpace; } #endregion

MVC 在视图中获取当前的Controller、Action的方式

在视图中获取Controller和Action的方式: Controller: @ViewContext.RouteData.Route.GetRouteData(this.Context).Values["controller"] Action: @ViewContext.RouteData.Route.GetRouteData(this.Context).Values["action"] 或者: Controller: @ViewContext.RouteDat

IE10、Chrome获取触发事件节点的源对象

记录学习JavaScript中遇到的知识点 1.IE中获取触发事件节点的源对象是通过属性srcElement,而Chrome则是以属性tagName获得.以如下函数getEventTarget(e)实现源对象的获取. 1 <script tyoe="text/JavaScript"> 2 //获取触发事件节点的源对象 3 function getEventTarget(e){ 4 e=window.event || e; 5 return e.srcElement || e

web过滤器中获取请求的参数(content-type:multipart/form-data)

1.前言: 1.1 在使用springMVC中,需要在过滤器中获取请求中的参数token,根据token判断请求是否合法: 1.2 通过requst.getParameter(key)方法获得参数值; 这种方法有缺陷:它只能获取  POST 提交方式中的Content-Type: application/x-www-form-urlencoded; HttpServletRequest request= (HttpServletRequest) req; String param = reque

ASP.NET MVC中有四种过滤器类型

在ASP.NET MVC中有四种过滤器类型 Action 1.在ASP.NET MVC项目中,新建文件夹Filter,然后新建类MyCustormFilter,继承自ActionFilterAttribute类,我们来看下ActionFilterAttribute类有如下四个方法,从命名我应该就可以看出他们的执行时机. public class MyCustormFilter:ActionFilterAttribute { public override void OnActionExecuti

net core体系-web应用程序-4asp.net core2.0 项目实战(1)-13基于OnActionExecuting全局过滤器,页面操作权限过滤控制到按钮级

1.权限管理 权限管理的基本定义:百度百科. 基于<Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员.后台管理员同时登录>我们做过了登录认证,登录是权限的最基础的认证,没有登录就没有接下来的各种操作权限管理,以及数据权限管理(暂不探讨),这里我们把登录当作全局权限,进入系统后再根据不同的角色或者人员,固定基本功能的展示,当不同的角色要对功能操作时,就需要验证操作权限,如:查看/添加/修改/删除,也就是我们常说的控制到按钮级.下面让我们一步一步来操作

asp.net core MVC 过滤器之ActionFilter过滤器(二)

本系类将会讲解asp.net core MVC中的内置过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFilter过滤器(三) asp.net core MVC 过滤器之ResourceFilter过滤器(四) asp.net core MVC 过滤器之AuthorizationFilter过滤器

MVC系统过滤器、自定义过滤器

一.系统过滤器使用说明 1.OutputCache过滤器 OutputCache过滤器用于缓存你查询结果,这样可以提高用户体验,也可以减少查询次数.它有以下属性: Duration:缓存的时间,以秒为单位,理论上缓存时间可以很长,但实际上当系统资源紧张时,缓存空间还是会被系统收回. VaryByParam:以哪个字段为标识来缓存数据,比如当“ID”字段变化时,需要改变缓存(仍可保留原来的缓存),那么应该设VaryByParam为"ID".这里你可以设置以下几个值: * = 任何参数变化

MVC异常处理的7大场景 + MVC的异常处理的过滤器 + 全局异常

1.MVC中捕获异常的过滤器属性时[HandleError] 2. 可以扩展这个属性来捕获异常 3.注册这个过滤器 4.Mvc的异常捕获时:Filter + 全局异常捕获 5.异常处理的7大场景 /// <summary> /// 异常处理在MVC中可以用过滤器属性[HandleError]实现--->利用Aop扩展这个属性 /// /// 自定义异常处理--标记到方法---出现异常惠静如Filter---完成善后处理 /// /// /// 全局注册的异常处理的Filter,7大场景会