分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

MVC 拦截指定的action

发布时间:2023-09-06 01:10责任编辑:蔡小小关键词:MVC

有时,我们需要在特定的一些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)[0]; ???????????var curUrl = System.Web.HttpUtility.UrlDecode(url).Substring(urlRoot.Length + 1); ???????????//从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 ???}}
View Code

2)在action上使用自定义的筛选特性:

MVC 拦截指定的action

原文地址:http://www.cnblogs.com/senyier/p/7500136.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved