MVC 拦截指定的action
有时,我们需要在特定的一些aciton中做校验。比如:验证是否登录。实现方式有两种:
一、编写一个公共的方法专门用于实现是否登录的验证,然后在每个需要进行验证的aciton的头部去调用该方法,根据方法的返回值做进一步处理
二、定义一个特性类,在特性类中去判断当前是否登录。然后在需要验证登录的aciton上加入定义的特性
本文主要说下如何实现第二种方式。
1、定义一个特性类,使之继承System.Web.Mvc.FilterAttribute, System.Web.Mvc.IActionFilter
System.Web.Mvc.FilterAttribute:筛选特性的抽象基类
System.Web.Mvc.IActionFilter:筛选器接口
2、在特性类中实现OnActionExecuting方法。
在System.Web.Mvc.IActionFilter中定义了两个方法:
OnActionExecuted:在action执行后执行的方法
OnActionExecuting:在aciton执行前执行的方法
3、在需要进行特性过滤、拦截的action上加入定义的特性 [你的特性类]
给大家参考下,我的项目中特性筛选应用。用于验证视图页面权限
1)自定义的筛选特性:ValidateUrl ,完整代码如下:
using Easyman.Managers;
using Easyman.Sys;
using System;
using System.Web.Mvc; namespace Easyman.Common.Mvc
{
public class ValidateUrl : System.Web.Mvc.FilterAttribute, System.Web.Mvc.IActionFilter
{ #region 执行action后执行这个方法
/// <summary>
/// 执行action后执行这个方法
/// </summary>
/// <param name="filterContext"></param>
void System.Web.Mvc.IActionFilter.OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext)
{ }
#endregion #region 执行action前执行这个方法
/// <summary>
/// 执行action前执行这个方法
/// </summary>
/// <param name="filterContext"></param>
void System.Web.Mvc.IActionFilter.OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
{ string url = filterContext.HttpContext.Request.Url.ToString();//url路径
string path = filterContext.HttpContext.Request.Path;//目录
var urlRoot = url.Split(new[] { path }, StringSplitOptions.None)[];
var curUrl = System.Web.HttpUtility.UrlDecode(url).Substring(urlRoot.Length + );
//从ioc容器中获取当前待使用接口的实例
var _modulesService = Abp.Dependency.IocManager.Instance.Resolve<IModulesAppService>();
var result = _modulesService.ValidateUrlRole(curUrl);
if(!result)
{
filterContext.Result = new RedirectToRouteResult(new System.Web.Routing.RouteValueDictionary(new { controller = "Home", action = "NoAccess" })); //重定向
}
}
#endregion
}
}
2)在action上使用自定义的筛选特性:
MVC 拦截指定的action的更多相关文章
- 写的太细了!Spring MVC拦截器的应用,建议收藏再看!
Spring MVC拦截器 拦截器是Spring MVC中强大的控件,它可以在进入处理器之前做一些操作,或者在处理器完成后进行操作,甚至是在渲染视图后进行操作. 拦截器概述 对于任何优秀的MVC框架, ...
- [转]ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的Attributes,用来标记添 ...
- ASP.NET MVC下的异步Action的定义和执行原理
一.基于线程池的请求处理ASP.NET通过线程池的机制处理并发的HTTP请求.一个Web应用内部维护着一个线程池,当探测到抵达的针对本应用的请求时,会从池中获取一个空闲的线程来处理该请求.当处理完毕, ...
- spring MVC拦截器01
spring MVC拦截 作用:身份校验,权限检查,防止非法訪问. 场景:一个bbs系统,用户没有登录就无法发帖或者删除评论; 一个博客系统,没有登录就无法发表博文,无法添加分类,无法删除博文. sp ...
- mvc拦截器
在ASP.NET MVC中,有三种拦截器:Action拦截器.Result拦截器和Exception拦截器.这里说的是第一种和第三种.其实所谓的ASP.NET MVC拦截器,也没什么神秘的,就是一个普 ...
- ASP.NET MVC下的异步Action的定义和执行原理[转]
http://www.cnblogs.com/artech/archive/2012/06/20/async-action-in-mvc.html Visual Studio提供的Controller ...
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html 有时候你想在调用action方法之前或者action方法之后处 ...
- Struts2拦截指定方法的拦截器
作者:禅楼望月 默认情况下,我们为一个Action配置一个拦截器,该拦截器会拦截该Action中的所有方法,但是有时候我们只想拦截指定的方法.为此,需要使用struts2拦截器的方法过滤特性. 要使用 ...
- spring mvc 拦截器的使用
Spring MVC 拦截器的使用 拦截器简介 Spring MVC 中的拦截器(Interceptor)类似于 Servler 中的过滤器(Filter).用于对处理器进行预处理和后处理.常用于日志 ...
随机推荐
- CSS画0.5px的线
今天遇到一个需求,画0.5px的线,查了以下资料,主要以scale方法为主.代码如下: /*0.5px上边框*/ .half_top_border_before:before{ content: &q ...
- js-ES6学习笔记-Proxy
1.Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程. 2.Proxy 可以理解成,在目标对象之前架设 ...
- 原生JSON解析
原生JSON解析 JSONObject:JSON数据封装对象JSONArray:JSON数据封装数组 布局: <?xml version="1.0" encoding=&qu ...
- 团队项目个人进展——Day06
一.昨天工作总结 冲刺第六天,深入学习了小程序官方文档,并看了几节小程序教程的视频 二.遇到的问题 对文档中的内容只是熟悉,理解并运用起来还存在问题 三.今日工作规划 学习微信小程序中WebSocke ...
- Sql Server中的游标最好只用于有主键或唯一键的表
游标cursor,我想大多数人都在sql server里面用过.当一个表数据量不太大的时候,游标还是可以用的,毕竟游标是循环一个表中每一行数据的最简便办法.但是如果你用一个游标去循环一个没有主键或唯一 ...
- php notes
1. foreach中的引用 <?php $arr = array(1, 2, 3, 4); foreach ($arr as &$value) { $value = $value * ...
- windows10移动热点打开后手机不能上网
电脑的win10操作系统自带有移动热点功能,可以共享上网,类似于手机的热点功能.今天在共享时遇到一些问题,现在解决了分享一下. 如果本身电脑无法上网,即wlan上网功能无效,有可能是驱动不兼容,可以在 ...
- 《SQL Server 2008从入门到精通》--20180724
目录 1.事务 1.1.事务的ACID属性 1.2.事务分类 1.2.1.系统提供的事务 1.2.2.用户自定义的事务 1.3.管理事务 1.3.1.SAVE TRANSACTION 1.3.2.@@ ...
- Qt简介 及与MFC、GDK+的比较
Qt C++图形用户界面应用程序开发框架. Qt的由来和发展 1.QT由来 Haavard Nord 和Eirik Chambe-Eng于1991年开始开发"Qt",1994年3月 ...
- "添加"模态框中某些数据不被清空
描述:一般情况下,“添加”的模态框弹出够,其中的输入框等为空,若是此中有某些数据是取自其他页面,不应被清空的,我们应当在html中添加以下内容. 解决方案:在form标签中添加“ preserve ...