MVC常用筛选器Filter
1.ActionFilterAttribute
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace WolfUI.Filter
{
public class wolfFilterAttribute : ActionFilterAttribute
{
//action method调用前发生。
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Debug.WriteLine("OnActionExecuting");
}
//action method调用后发生, 但是在result执行前发生 (在 view 呈现前)
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
Debug.WriteLine("OnActionExecuted");
}
//result执行前发生(在view 呈现后)
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
Debug.WriteLine("OnResultExecuted");
}
//result执行前发生(在view 呈现前)
public override void OnResultExecuting(ResultExecutingContext filterContext)
{
Debug.WriteLine("OnResultExecuting");
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace WolfUI.Filter
{
/// <summary>
/// 接口参数验证过滤器
/// author:wolf
/// </summary>
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true)]
public class ModelValidationAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext actionContext)
{
var viewData = actionContext.Controller.ViewData;
var modelState = viewData.ModelState;
if (!modelState.IsValid)
{
string error = string.Empty;
foreach (var key in modelState.Keys)
{
var state = modelState[key];
if (state.Errors.Any())
{
error = state.Errors.First().ErrorMessage;
break;
}
}
actionContext.Result = new JavaScriptResult() { Script = $"$tools.dangerTip('{error}','');" };
}
}
}
}
2.HandleErrorAttribute
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace SuiBao.WebBI.Filter
{
public class ExceptionLogAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
//写错误日志记录
string url = HttpContext.Current.Request.Url.AbsoluteUri;
string message = string.Format("异常页面:{0}\r\n引发异常源:{1}\r\n消息类型:{2}\r\n消息内容:{3}\r\n引发异常的方法:{4}\r\n堆栈信息:{5}"
, url
, filterContext.Exception.Source
, filterContext.Exception.GetType().Name
, filterContext.Exception.Message
, filterContext.Exception.TargetSite,
filterContext.Exception.StackTrace
);
if (filterContext.RequestContext.HttpContext.Request.IsAjaxRequest())
{
SuiBao.Utility.LogHelper.Exception(message);
var reqWith = filterContext.RequestContext.HttpContext.Request.Params["X-Requested-With"];
//还有一种判断办法,根据报文头里的accept类型,参考权限验证里面
if (!string.IsNullOrEmpty(reqWith) && reqWith == "XMLHttpRequest")
{
filterContext.Result = new JavaScriptResult() { Script = "$tools.dangerTip( '系统错误,请稍候再试!');" };
}
else
{
filterContext.Result = new JsonNetResult() { Data = new { Success = false, Msg = "系统错误,请稍候再试!" } };
}
}
else
{
SuiBao.Utility.LogHelper.Exception(message);
//根据状态码处理
int statusCode = new HttpException(null, filterContext.Exception).GetHttpCode();
if (statusCode == )
{
filterContext.Result = new RedirectResult("/Error/Http_500");
filterContext.HttpContext.Response.StatusCode = ;
}
else if (statusCode == )
{
filterContext.Result = new RedirectResult("/Error/Http_404");
filterContext.HttpContext.Response.StatusCode = ;
}
}
filterContext.ExceptionHandled = true;
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.TrySkipIisCustomErrors = true; }
}
}
3.AuthorizeAttribute
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace WolfUI.Filter
{
public class AuthorizeDiy : AuthorizeAttribute
{
/// <summary>
/// 提供一个入口用于自定义授权检查
/// </summary>
/// <param name="httpContext"></param>
/// <returns></returns>
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool pass = false;
HttpCookie cookie = HttpContext.Current.Request.Cookies["admin"];
if (cookie == null || cookie.Value == null)
{
httpContext.Response.StatusCode = ;
pass = false;
}
else
{
pass = true;
}
return pass;
} /// <summary>
/// 处理未能授权的Http请求
/// </summary>
/// <param name="filterContext"></param>
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
base.HandleUnauthorizedRequest(filterContext);
filterContext.HttpContext.Response.Write(filterContext.HttpContext.Response.StatusCode);
if (filterContext.HttpContext.Response.StatusCode == )
{
//跳转到登录界面
filterContext.Result = new RedirectResult("/Login");
}
}
}
}
4.设置全局过滤
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
//登录验证
filters.Add(new AuthorizationAttribute());
//异常处理
filters.Add(new ExceptionLogAttribute());
}
}
MVC常用筛选器Filter的更多相关文章
- MVC四大筛选器—ExceptionFilter
该筛选器是在系统出现异常时触发,可以对抛出的异常进行处理.所有的ExceptionFilter筛选器都是实现自IExceptionFilter接口 public interface IExceptio ...
- MVC四大筛选器—ActionFilter&ResultedFilter
AuthorizeFilter筛选器 在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向 ...
- MVC四大筛选器—AuthorizeFilter
在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向方面编程)的方式来设计的,通过对Act ...
- jQuery支持链式编程,一句话实现左侧table页+常用筛选器总结
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- python 之 前端开发( jQuery选择器、筛选器、样式操作、文本操作、属性操作、文档操作)
11.5 jQuery 引入方式: 方式一:本地引入 <script src="jquery-3.3.1.min.js"></script> <scr ...
- jQuery基本筛选器-表单筛选器-关系筛选器
一.基本筛选器 :first // 第一个 :last // 最后一个 :eq(index)// 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd ...
- Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容
Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器,用于代码压缩. /*页面压缩 筛选器*/ public class WhiteSpaceFilter : Stream { privat ...
- mvc 筛选器
之前公司中,运用ActionFilterAttribute特性实现用户登录信息的验证,没事看了看,留下点东西备忘. 好的,瞅这玩意一眼就大概能猜到这货是干嘛的了吧,没错,action过滤器.其实就是A ...
- 基础教程:ASP.NET Core 2.0 MVC筛选器
问题 如何在ASP.NET Core的MVC请求管道之前和之后运行代码. 解 在一个空的项目中,更新 Startup 类以添加MVC的服务和中间件. publicvoid ConfigureServi ...
随机推荐
- typealias
类的别名
- Nginx管理脚本
#!/bin/bash # chkconfig: # description: Start/Stop Nginx server path=/application/nginx/sbin pid=/ap ...
- spyder里的"查找文件里的特定字符串"非常方便
spyder里的"查找文件里的特定字符串"非常方便 快捷键是: ^+shift+F 使用方法: 输入被查找的字符串: 比如: .rcParam, 注意大小写敏感的(默认设置) 回车 ...
- HashMap分析及散列的冲突处理
1,Hashing过程 像二分查找.AVL树查找,这些查找算法的时间复杂度为O(logn),而对于哈希表而言,我们一般说它的查找时间复杂度为O(1).那它是怎么实现的呢?这就是一个Hashing过程. ...
- 复杂HTML解析
面对页面解析难题时候,需要注意问题: 1.寻找“打印次页”的链接,或者看看网站有没有HTML样式更友好的移动版(把自己的请求头设置成处于移动设备的状态,然后接收网站移动版). 2.寻找隐藏在JavaS ...
- xss漏洞利用
简述 跨站脚本攻击(也称为XSS)指利用网站漏洞从用户那里恶意盗取信息.攻击者通过在链接中插入恶意代码,就能够盗取用户信息.攻击者通常会在有漏洞的程序中插入 JavaScript.VBScript. ...
- java程序运存扩容
线上程序随着业务增多,运行的越来越慢,初步判定是因为内存分配的太小导致频繁的进行GC和OOM,于是着手增加内存上限. 增加内存上限都知道是修改java启动的opt,因为服务容器是tomcat 首先是在 ...
- 《C#数据结构和算法》-排序
7.7 各种排序方法的比较与讨论 排序在计算机程序设计中非常重要,上面介绍的各种排序方法各有优缺点, 适用的场合也各不相同.在选择排序方法时应考虑的因素有: ( )待排序记录的数目 n 的大小: ( ...
- Android ROM资源文件存放位置
位于目录:framework/core/res/res /frameworks/base/core/res/res/values/public.xml 上面的文件中公开了上层(也就是第三方应用或者系统 ...
- Web项目Shiro总结及源码(十六)
shiro过虑器 过滤器简称 对应的java类 anon org.apache.shiro.web.filter.authc.AnonymousFilter authc org.apache.shir ...