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 ...
随机推荐
- C# 多线程辅助类实现多任务
1)首先实现一个多线程的辅助类,代码如下: public class ThreadMulti { public delegate void DelegateComplete(); public del ...
- android studio 统一管理版本号配置
1.在android 的根目录新建一个versions.gradle 2.在这里面声明 各个第三方库的版本,写法有两种,第一种,写ext 扩展, 引用的时候, 第二种: 然后在project级的bui ...
- DOM-Element对象
一. 整体介绍 这里介绍DOM对象中Element对象. 那么何为Element对象呢?Element对象就是HTML元素,Element对象包括:元素节点.文本节点.属性节点. 下面利用一张图来总 ...
- C#实现虚拟控件列表显示100w个控件方法
方法一: C#的FlowlayoutPanel添加一定数据量的控件后就会空白,通过虚拟列表方式可以解决这个问题. 1.创建一个包含ScrollPanel和滚动条的用户控件,定义一个List,添加控件时 ...
- tomcat运行时为什么不能删除war
tomcat启动时会监听webapps下的war文件,如果有新增就解压,如果有删除就删除项目
- Python中的包ImportError
前言 Python中的包给我提供了很好的代码组织,相似的功能模块放在同一个包内,不仅代码结构清晰,而且调用起来也比较方便(可以用*导入) 但是,我们在刚开始使用Python包的时候总是会遇到导入错误& ...
- SpringBoot2.x配置文件讲解
SpringBoot2.x配置文件讲解 简介:SpringBoot2.x常见的配置文件 xml.yml.properties的区别和使用 xml.properties.json.yaml 1.常见的配 ...
- Udacity并行计算课程 CS344 编程作业答案
Problem set 1 // Homework 1 // Color to Greyscale Conversion //A common way to represent color image ...
- Windows和Mac上NodeJS和Express的安装
一.安装NodeJS,官网上下载,https://nodejs.org/en/ 直接下一步安装就行了. 打开命令行工具,输入 node -v 则会出现node的版本,则成功了. 下面我们介绍如何安装e ...
- 腾讯云外网IP直通后,遇到网络问题
通过内网机器,先重启网卡 service network restart cd /usr/local/etc ./modify_route.sh