MVC Filter自定义验证(拦截)

 1 namespace QS.Web.Extensions
 2 {
 3     /// <summary>
 4     ///     验证session、权限    状态
 5     /// </summary>
 6     [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
 7     public class RequestFilterAttribute : ActionFilterAttribute
 8     {
 9         public override void OnActionExecuting(ActionExecutingContext filterContext)
10         {
11             FilterAttributesInfo attributes = filterContext.GetExecutingContext();
12
13             switch (attributes.Action.ToUpper())
14             {
15                 case "LOGIN":
16                 case "LOGINVALID":
17                 case "LOGOUT": break;
18                 default:
19                     //session验证
20                     var sessionUserInfo = filterContext.HttpContext.Session[SystemConsts.AdminSession.ToString()];
21                     if (null == sessionUserInfo)
22                     {
23                         var url = new UrlHelper(filterContext.RequestContext);
24                         var routeUrl = url.Action("Login", "Account", new { ErrorMsg = "用户信息丢失!" });
25                         filterContext.Result = new RedirectResult(routeUrl);
26                     }
27                     else
28                     {
29                         //参数非空验证
30                         foreach (var param in attributes.ParameterArray)
31                         {
32                             param.ParameterName.CheckNotNullOrEmpty(param.ParameterName);
33                         }
34                         //权限验证
35                         var permissions = filterContext
36                                             .HttpContext
37                                             .Session[SystemConsts.AdminRolePermissions.ToString()]
38                                             as List<SystemUserPermissionDto>;
39                         if (!permissions.Any(x =>
40                                 x.ControllerName.ToLower() == attributes.Controller.ToLower() &&
41                                 x.ActionName.ToLower() == attributes.Action.ToLower()))
42                         {
43                             filterContext.Result = new ContentResult() { Content = "invalid operation :no permission" };
44                         }
45                     }
46                     break;
47             }
48             base.OnActionExecuting(filterContext);
49         }
50     }
51 }

其中涉及到获取  filterContext的方法类如下:

 1 // -----------------------------------------------------------------------
 2 //  <copyright file="FilterAttributesInfo.cs" company="技术支持——谭明超">
 3 //      Copyright (c) 2016 QS.Web.Extensions. All rights reserved.
 4 //  </copyright>
 5 //  <last-editor>谭明超</last-editor>
 6 //  <last-date>2016/8/2 18:37:01</last-date>
 7 // -----------------------------------------------------------------------
 8
 9 using System;
10 using System.Collections.Generic;
11 using System.Linq;
12 using System.Web;
13 using System.Web.Mvc;
14
15 namespace QS.Web.Extensions
16 {
17     /// <summary>
18     ///     互殴去
19     /// </summary>
20     public class FilterAttributesInfo
21     {
22         /// <summary>
23         ///     控制器名称
24         /// </summary>
25         public string Controller { get; set; }
26         /// <summary>
27         ///     方法名称
28         /// </summary>
29         public string Action { get; set; }
30         /// <summary>
31         ///     route参数
32         /// </summary>
33         public ParameterDescriptor[] ParameterArray { get; set; }
34
35     }
36
37     /// <summary>
38     ///     获取 filter filterContext的相关属性
39     /// </summary>
40     public static class FilterAttributeExtension
41     {
42         /// <summary>
43         ///     获取当前filterContext的相关属性
44         /// </summary>
45         /// <param name="filterContext"></param>
46         /// <returns></returns>
47         public static FilterAttributesInfo GetExecutingContext(this ActionExecutingContext filterContext)
48         {
49             return new FilterAttributesInfo
50             {
51                 Controller = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName,
52                 Action = filterContext.ActionDescriptor.ActionName,
53                 ParameterArray = filterContext.ActionDescriptor.GetParameters()
54             };
55         }
56     }
57
58 }
时间: 2024-08-09 01:05:48

MVC Filter自定义验证(拦截)的相关文章

mvc的自定义验证

mvc的验证(validation)分服务端验证和客户端验证,虽然有许多已经定义好的验证如 [Required]等,但每个人总有各自独特的需求,所以这时候我们可以来实现自己的验证特性. 实现服务端验证  继承validationAttribute 类: 重写 IsValid和 FormatErrorMessage两个方法, IsValid实现自己的验证判断逻辑,FormatErrorMessage返回出错时的自定义错误信息. 实现客户端验证(参考) 实现IClientValidatable接口:

MVC Filter自定义异常(拦截)

1 // ----------------------------------------------------------------------- 2 // <copyright file="CustomExceptionAttribute.cs" company="技术支持——谭明超"> 3 // Copyright (c) 2016 QS.Web.Extensions. All rights reserved. 4 // </copyri

MVC Filter登录验证

Login Controller public ActionResult Index() { //return Content("hello index!"); return View(); } [HttpGet] public ActionResult Login() { return View(); } [HttpPost] public ActionResult Login(string username, string password) { if(username==&quo

ASP.NET MVC自定义验证Authorize Attribute

前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密>http://www.cnblogs.com/insus/p/5983645.html那今次Insus.NET在ASP.NET MVC实现自定义验证Authorize Attribute. 实现之前,Insus.NET对usp_Users_VeryLoginVerify修改一下,改为更好理解与使用

ASP.NET MVC自定义验证Authorize Attribute(包含cookie helper)

前几天Insus.NET有在数据库实现过对某一字段进行加密码与解密<使用EncryptByPassPhrase和DecryptByPassPhrase对MS SQLServer某一字段时行加密和解密>http://www.cnblogs.com/insus/p/5983645.html那今次Insus.NET在ASP.NET MVC实现自定义验证Authorize Attribute. 实现之前,Insus.NET对usp_Users_VeryLoginVerify修改一下,改为更好理解与使用

asp.net MVC之 自定义过滤器(Filter) - shuaixf

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

ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttribute应用到Model的类型或者属性上即可.对于自定义验证,我们也只需要定义相应的Validation 就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NET MVC中实现自定义验证的基本步骤.[源代码从这里下载] 一.AgeRangeAttr

Mvc自定义验证

假设我们书店需要录入一本书,为了简单的体现我们的自定义验证,我们的实体定义的非常简单,就两个属性,一个名称Name,一个出版社Publisher. public class BookInfo { public string Name { get; set; } public string publisher { get; set; } } Ok,需求有了,实体有了,那么添加我们的控制器和视图.先把代码贴出来.稍后我们在做分析 [HttpGet] public ActionResult Index

Asp.net Mvc 身份验证、异常处理、权限验证(拦截器)实现代码

本问主要介绍asp.net的身份验证机制及asp.net MVC拦截器在项目中的运用.现在让我们来模拟一个简单的流程:用户登录>权限验证>异常处理 1.用户登录 验证用户是否登录成功步骤直接忽略,用户登录成功后怎么保存当前用户登录信息(session,cookie),本文介绍的是身份验证(其实就是基于cookie)的,下面看看代码. 引入命名空间 using System.Web.Security; Users ModelUser = new Users() { ID = 10000, Nam