MVC拦截器,MVC过滤器,MVC ActionFilterAttribute拦截器过滤器,OnActionExecuting

MVC实现拦截过滤器,过滤字符串及实体类和动态修改数据,部分过滤和全部过滤:

#region

using System;

using System.Collections.Generic;

using System.Linq;

using System.Reflection;

using System.Security.Policy;

using System.Text;

using System.Web;

using System.Web.Mvc;

using System.Reflection;

namespace SaaS.Admin.Base

{

/// <summary>

/// 全局过滤器

/// </summary>

public class CustomerFilterAttribute:ActionFilterAttribute

{

/// <summary>

/// 检查是否需要过滤

/// </summary>

public bool IsCheck { get; set; }//是否需要过滤标记

/// <summary>

/// 在执行操作Action方法前执行调用

/// </summary>

/// <param name="filterContext"></param>

public override void OnActionExecuting(ActionExecutingContext filterContext)

{

base.OnActionExecuting(filterContext);

#region 检查是否需要拦截过滤【不需要检查过滤】

if (!IsCheck)

{

return;//不需要过滤

}

#endregion

var parameters = filterContext.ActionDescriptor.GetParameters();

foreach (var parameter in parameters)

{

if (parameter.ParameterType == typeof(string))

{

//获取字符串参数原值

var orginalValue = filterContext.ActionParameters[parameter.ParameterName] as string;

//使用过滤算法处理字符串

if (!string.IsNullOrEmpty(orginalValue) && orginalValue!="")

{

var filteredValue = HtmlEscapeCode(orginalValue);

////将处理后值赋给参数

filterContext.ActionParameters[parameter.ParameterName] = filteredValue;

}

}

else if (parameter.ParameterName =="model")

{

//获取字符串参数原值

var value = filterContext.ActionParameters[parameter.ParameterName];

if (value.GetType().IsClass && value.GetType().Name != "String")//检查是否是类,并且不是字符串类型

{

object objClass = value;//获取字符串参数原值

PropertyInfo[] infos = objClass.GetType().GetProperties();//获取原对象的所有公共属性

#region 动态创建新实例【动态创建新的实体类实例】

System.Type tt = System.Type.GetType(value.ToString());//获取指定名称的类型

object ff = Activator.CreateInstance(tt, null);//创建指定类型实例

PropertyInfo[] fields = ff.GetType().GetProperties();//获取指定对象的所有公共属性

object obj = Activator.CreateInstance(tt, null);//创建新指定类型的实例【动态创建新的实例】

#endregion

foreach (PropertyInfo info in infos)

{

if (info.CanRead)

{

//Console.WriteLine(info.Name + "=" + info.GetValue(objClass, null));

if (info.PropertyType.Name == "String")

{

//获取值

string orginalValue =Convert.ToString(info.GetValue(objClass, null));

if (!string.IsNullOrEmpty(orginalValue) || orginalValue!="")

{

//检查过滤特殊字符

var filteredValue = HtmlEscapeCode(orginalValue);

//将处理后值赋给参数

info.SetValue(obj, filteredValue, null);

//给实体对象赋新值

filterContext.ActionParameters[parameter.ParameterName] = obj;

}

}

else

{

object orginalValue = info.GetValue(objClass, null);//获取值

info.SetValue(obj, orginalValue,null);//给对象赋新值

filterContext.ActionParameters[parameter.ParameterName] = obj;//给实体类对象赋值

}

}

}

}

}

}

}

/// <summary>

/// 在执行操作Action方法后执行调用

/// </summary>

/// <param name="filterContext"></param>

public override void OnActionExecuted(ActionExecutedContext filterContext)

{

base.OnActionExecuted(filterContext);

var controllerName = filterContext.RouteData.Values["controller"];

var actionName = filterContext.RouteData.Values["action"];

}

//过滤关键字

public string HtmlEscapeCode(string html)

{

var strhtml = html.Replace("javascript", "")

.Replace("vbscript", "")

.Replace("jscript", "")

.Replace("script", "")

.Replace("eval", "")

.Replace("<", "<")

.Replace(">", ">")

.Replace("\‘", "'")

.Replace("\"", """)

.Replace("&", "&")

.Replace("#", "#");

return strhtml;

}

}

}

#endregion

//以下是不需要过滤的Controllers

using SaaS.Contracts.SaaS.Intern.Dtos.BugDtos;

using SaaS.Framework.SharpArch.Repositorys;

using SharpArch.NHibernate.Web.Mvc;

using SaaS.Models.Domain.Enums;

using SaaS.Models.Framework.Utility;

using SaaS.Framework.Collections;

namespace SaaS.Admin.Controllers

{

/// <summary>

/// BUG单管理

/// </summary>

[CustomerFilter(IsCheck =false)]//不需要过滤标记

public class BugController : AuthorizeBaseController

{

/// <summary>

/// 创建BUG单管理构造函数(生成构造函数的快捷健:ctorf后按下enter健)

/// </summary>

private readonly IBugService _bugService;

public BugController(IBugService bugService)

{

_bugService = bugService;

}

//以下是需要过滤的标记

using System;

using System.Collections;

using System.Collections.Generic;

using System.Linq;

using System.Web.Mvc;

using Microsoft.Practices.ServiceLocation;

using SaaS.Contracts.SaaS.Intern;

using SaaS.Framework.IIdentity;

using SaaS.Models.Domain.Enums;

namespace SaaS.Admin.Base

{

/// <summary>

/// 基础Controller

/// </summary>

[CustomerFilter(IsCheck = true)]//过滤标签

public class BaseController : Controller

{

/// <summary>

/// 弹出成功提示

/// </summary>

/// <param name="message">成功消息</param>

/// <param name="url">跳转路径</param>

/// <returns></returns>

protected ActionResult SuccessResult(string message, string url)

{

TempData["SuccessResult"] = message;

return Redirect(url);

}

时间: 2024-10-05 00:37:42

MVC拦截器,MVC过滤器,MVC ActionFilterAttribute拦截器过滤器,OnActionExecuting的相关文章

过滤器 ;spring拦截器 切片 小结

1. springMVc的拦截器 实现HandlerInterceptor接口,如下: public class HandlerInterceptor1 implements HandlerInterceptor { // controller执行后且视图返回后调用此方法 // 这里可得到执行controller时的异常信息 // 这里可记录操作日志 @Override public void afterCompletion(HttpServletRequest arg0, HttpServle

Spring MVC系列:(2)视图解析器、URL映射器、适配器

1.默认的URL映射器.适配器和视图解析器 SpringMVC提供了默认的URL映射器.适配器和视图解析器. 在上一文中,springmvc-helloworld.xml内容如下: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:mvc="http://

Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求

Java过滤器处理Ajax请求,Java拦截器处理Ajax请求,拦截器Ajax请求 java 判断请求是不是ajax请求,Java判断是否为ajax请求 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ?Copyright 蕃薯耀 2017年8月10日 http://www.cnblogs.com/

过滤器(Filter)、拦截器(Interceptor)、监听器(Listener)

一.Filter 过滤器 1.简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. 它主要用于对用户请求进行预处理,也可以对HttpServletResponse 进行后处理.使用Filter 的完整流程:Filter 对用户请求

理解ASP.NET中MVC 编程模型 第4章 HTML帮助器

HTML 帮助器用于修改 HTML 输出. HTML 帮助器 HTML 帮助器用于修改 HTML,HTML 帮助器没有事件模型和 view state.在大多数情况下,HTML 帮助器仅仅是返回字符串的方法. 标准的 HTML 帮助器 MVC 包含了大多数常用的 HTML 元素类型的标准帮助器,比如 HTML 链接和 HTML 表单元素. HTML 链接 呈现 HTML 链接的最简单方法是使用 HTML.ActionLink() 帮助器. 通过 MVC,Html.ActionLink() 不连接

过滤器(Filter)与拦截器(Interceptor)的区别

1 .拦截器是基于java的反射机制的,而过滤器是基于函数回调. 2 .拦截器不依赖与servlet容器,过滤器依赖与servlet容器. 3 .拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用. 4 .拦截器可以访问action上下文.值栈里的对象,而过滤器不能访问. 5 .在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次. 6.拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,

SpringMVC拦截器(实现登录验证拦截器)

本例实现登陆时的验证拦截,采用SpringMVC拦截器来实现 当用户点击到网站主页时要进行拦截,用户登录了才能进入网站主页,否则进入登陆页面 核心代码 首先是index.jsp,显示链接 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> 2 <% 3 String path = request.getContextPath(); 4 St

像asp.net Mvc一样开发nodejs+express Mvc站点

像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风学了一些,对前端的框架也了解一些,angularJs,requirejs,commonJs,backbone等等前端的mvc框架也异常流行,与这些前端的流行框架一同火起来的还有node.js. Node.js将javascript作为服务器端的代码开发,由其语言特性(单线程,异步)等以高效率高吞吐著称.这里不会去讨论node.js的好的坏的

spring mvc 02——什么是Spring MVC

什么是SpringMVC 1.概述 Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架. 查看官方文档:https://docs.spring.io/spring/docs/5.2.4.RELEASE/spring-framework-reference/web.html#spring-web 我们为什么要学习SpringMVC呢? Spring MVC的特点: 轻量级,简单易学 高效 , 基于请求响应的MVC框架 与Spring兼容性好,

Java过滤器与SpringMVC拦截器之间的关系与区别

今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深夜,时间原因,我就把一些网友的观点重点摘录下来,大家仔细看后也一定会有一个比较新的认识(在此非常感谢那些大牛们的无私奉献,分享他们的经验与心得,才能让像我这样的小白有机会站一下你们这些巨人的肩膀,才能少走些弯路).过滤器和拦截器的区别:①拦截器是基于java的反射机制的,而过滤器是基于函数回调. ②