Asp.net mvc自定义Filter简单使用
自定义Filter的基本思路是继承基类ActionFilterAttribute,并根据实际需要重写OnActionExecuting,OnActionExecuted,OnResultExecuting,OnResultExecuted这四个中的一个或多个方法。
注意类名一定要以Attribute结尾。
故名思义,Action执行前,执行后,结果返回前,结果返回后。所以它们的执行先后顺序就是OnActionExecuting,OnActionExecuted,Action,OnResultExecuting,OnResultExecuted。
以下是我个人在工作中的两处实际用法分享。
一、重写OnActionExecuting,限制请求来源。
利用最近在做微信企业号应用开发。过程中需对所有请求来源限制为只能是微信客户端。应用是基于asp.net mvc做的,所以第一反应就是借助filter过滤器实现。
在App_Start文件夹下新建类OutOfWeiXinAttribute,并继承ActionFilterAttribute,然后重写OnActionExecuting方法。通过 Request.UserAgent中是否包含micromessenger字符标识判断请求是否来自微信客户端,最后通过filterContext.Result设置自定义返回结果。
/// <summary>
/// 防止应用程序在微信以外的地方打开
/// </summary>
public class OutOfWeiXinAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
string userAgent = filterContext.RequestContext.HttpContext.Request.UserAgent.ToLower(); LogHelper<OutOfWeiXinAttribute>.Debug("userAgent:" + userAgent);
var isWeixin = userAgent.IndexOf("micromessenger") != -; //以下代码只会在调试时执行
#if DEBUG
isWeixin = true;
#endif
// if (!isWeixin)
{
ViewResult view = new ViewResult();
view.ViewName = "OutofWeixinApp";
filterContext.Result = view;
}
else
{
base.OnActionExecuting(filterContext);
} }
}
自定义Filter
在需要做此限制的Controller或者Action上直接写上[OutOfWeiXin]就实现了想要的功能。
#if DEBUG
coding..
#endif
其中的coding 部分只有在调试环境下才会执行,所以可以用来方便调试使用。
二、重写OnActionExecuted,统一处理抛出的异常。
重写OnActionExecuted,判断filterContext.Exception是否为空,即可找到异常。设置filterContext.ExceptionHandled = true;
返回结果filterContext.Result = view;就完成了统一处理异常。
/// <summary>
/// 捕获全局异常
/// </summary>
public class LoggingFilterAttribute :ActionFilterAttribute
{
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
if (filterContext.Exception != null)
{
//发送邮件并记录异常日志
LogHelper<LoggingFilterAttribute>.SendEmaiAndLogError(filterContext.Exception); filterContext.Canceled = true;
filterContext.ExceptionHandled = true;
ViewResult view = new ViewResult();
view.ViewName = "Error";
filterContext.Result = view;
} base.OnActionExecuted(filterContext);
}
}
自定义Filter处理全局异常
在需要应用的Controller或Action上写上[HandleError,LoggingFilter]就可以了。
Asp.net mvc自定义Filter简单使用的更多相关文章
- [asp.net mvc]自定义filter
写在前面 最近在摸索mvc,在app中的webview中嵌入h5应用,经常需要用到对cookie的读取操作.所以想到通过自定义的filter截取cookie,然后通过在action上面打特性的方式针对 ...
- 反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) C#中缓存的使用 C#操作redis WPF 控件库——可拖动选项卡的TabControl 【Bootstrap系列】详解Bootstrap-table AutoFac event 和delegate的分别 常见的异步方式async 和 await C# Task用法 c#源码的执行过程
反爬虫:利用ASP.NET MVC的Filter和缓存(入坑出坑) 背景介绍: 为了平衡社区成员的贡献和索取,一起帮引入了帮帮币.当用户积分(帮帮点)达到一定数额之后,就会“掉落”一定数量的“帮帮 ...
- asp.net mvc 自定义pager封装与优化
asp.net mvc 自定义pager封装与优化 Intro 之前做了一个通用的分页组件,但是有些不足,从翻页事件和分页样式都融合在后台代码中,到翻页事件可以自定义,再到翻页和样式都和代码分离, 自 ...
- ASP.NET MVC 自定义路由中几个需要注意的小细节
本文主要记录在ASP.NET MVC自定义路由时,一个需要注意的参数设置小细节. 举例来说,就是在访问 http://localhost/Home/About/arg1/arg2/arg3 这样的自定 ...
- Asp.net Mvc 自定义Session (二)
在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...
- Asp.net mvc 自定义全局的错误事件HandleErrorAttribute无效
Asp.net mvc 自定义全局的错误事件HandleErrorAttribute,结果无效, 原因: 1.没有在RegisterGlobalFilters 里面添加或者你要的位置添加. 2.你把这 ...
- ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)
前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和 ...
- ASP.NET MVC 自定义Razor视图WorkContext
概述 1.在ASP.NET MVC项目开发的过程中,我们经常需要在cshtml的视图层输出一些公用信息 比如:页面Title.服务器日期时间.页面关键字.关键字描述.系统版本号.资源版本号等 2.普通 ...
- asp.net MVC 自定义模型绑定 从客户端中检测到有潜在危险的 Request.QueryString 值
asp.net mvc 自定义模型绑定 有潜在的Requset.Form 自定义了一个模型绑定器.前端会传过来一些敏感字符.调用bindContext. valueProvider.GetValue( ...
随机推荐
- Objective-C 桥接模式 -- 简单实用和说明
桥接模式---把两个相关联的类抽象出来, 以达到解耦的目的 比如XBox遥控器跟XBox主机, 我们抽象出主机和遥控器两个抽象类, 让这两个抽象类耦合 然后生成这两个抽象类的实例XBox & ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
- easyui相关script的配置
<!-- 1 jQuery的js包 --> <script type="text/javascript" src="jquery-easyui-1.4. ...
- 【Win 10应用开发】如何知道UAP在哪个平台上运行
面向22世纪的现代化应用程序可以同时在多种设备上运行,于是有朋友会有一个疑问:有时候,我们还真的需要判断一下,UAP应用程序在哪个平台上运行.尽管大多情况下我们不必要这样做,但某些特殊情况还得考虑.比 ...
- 编译opengl编程指南第八版示例代码通过
最近在编译opengl编程指南第八版的示例代码,如下 #include <iostream> #include "vgl.h" #include "LoadS ...
- @font-face使用
转自http://www.tuicool.com/articles/QVf6nei 一.webfont与@font-face 什么是webfont web font,又称之为 在线字体 或者 网络字体 ...
- 校验码(海明校验,CRC冗余校验,奇偶校验)
循环冗余校验码 CRC码利用生成多项式为k个数据位产生r个校验位进行编码,其编码长度为n=k+r所以又称 (n,k)码. CRC码广泛应用于数据通信领域和磁介质存储系统中. CRC理论非常复杂,一般书 ...
- iframe编程的一些问题
前几天做一个用iframe显示曲线图的demo,发现对iframe的contentDocument绑定 onclick事件都无效,而在页面中对iframe.contentDocument的onclic ...
- DOMContentLoaded实现
IE系列直到IE9才支持DOMContentLoaded事件,对于IE8及其之前版本,如果html内没有框架,则可以采用document.documentELement.doScroll来判断 是否构 ...
- 1Z0-053 争议题目解析686
1Z0-053 争议题目解析686 考试科目:1Z0-053 题库版本:V13.02 题库中原题为: 686.You execute the following FLASHBACK TABLE com ...