Action过滤器可以用在调用动作方法之前或之后,执行一些特殊的逻辑,比如用登录验证:

Action过滤器实现IActionFilter接口,该接口有两个方法:

 public interface IActionFilter
{
void OnActionExecuted(ActionExecutedContext filterContext);
void OnActionExecuting(ActionExecutingContext filterContext);
}

我们先创建一个BaseController,在这个基类中重写OnActionExecuting方法,用于让其他的控制器继承此基类。如:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Script.Serialization;
using XFK.PICCInsureTravel.Common;
using XinfuMall.XinfuWeb.PublicClass; namespace XFK.PICCInsureTravel.Controllers
{
public abstract class BaseController : Controller
{
public JavaScriptSerializer js = new JavaScriptSerializer();
public LogHelper log = null;
public UserSession user { get; set; }
public EnterpriseAccountSession enterprise { get; set; }
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
LogHelper.WriteLog("进入BaseController");
TempData["xinfuUrl"] = System.Configuration.ConfigurationManager.AppSettings["xinfuUrl"];
if (XFK.Infrastructure.Util.SessionManager.Read(UserUtil.user_sessionStr) != null)
{
user = XFK.Infrastructure.Util.SessionManager.Read(UserUtil.user_sessionStr) as UserSession;
object enterpriseId = XFK.Infrastructure.Util.SessionManager.Read(EnterpriseUtil.enterprise_sessionId);
enterprise = new EnterpriseAccountSession();
enterprise.Id = Convert.ToInt32(enterpriseId);
ViewBag.UserName = user.AccountName;
ViewBag.Enterpriseid = Convert.ToInt32(enterpriseId);
var limitEnterprise = String.IsNullOrEmpty(ConfigurationManager.AppSettings["limitEnterprise"]) ? "" : ConfigurationManager.AppSettings["limitEnterprise"];
if (limitEnterprise.Split(',').Contains(enterprise.Id.ToString()))
{
System.Web.HttpContext.Current.Response.Write("对不起,所属的企业没有订购此产品的权限!");
}
}
else
{
filterContext.Result = new RedirectResult(ConfigurationManager.AppSettings["xinfuUrl"] + "mall/Login?originUrl=" + HttpUtility.UrlEncode(Request.Url.ToString()));
LogHelper.WriteLog("当前访问的路径是:" + ConfigurationManager.AppSettings["xinfuUrl"] + "mall/Login?originUrl=" + HttpUtility.UrlEncode(Request.Url.ToString()));
}
}
}
}

注意,当验证不通过时,我们给filterContext.Result赋值,用于跳转页面。这个filterContext.Result属性是一个ActionResult类型的子集---RedirectResult:

当执行到filterContext.Result时,我们给它赋值以后,便会执行跳转。

这个BaseController建好以后,下面的工作就是在其他控制器中使用了:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc; namespace XFK.PICCInsureTravel.Controllers
{
public class HomeController : BaseController
{
public ActionResult Index()
{
return View();
}
}
}

参考:http://skybirdzw.blog.163.com/blog/static/72570626201781465310313/

MVC中的Action过滤器的更多相关文章

  1. MVC中使用Action全局过滤器出现:网页无法正常运作 将您重定向的次数过多。解决办法

    前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的 ...

  2. MVC中的错误过滤器无法拦截URL路径错误的解决办法

    “/”应用程序中的服务器错误. 无法找到资源. 说明: HTTP 404.您正在查找的资源(或者它的一个依赖项)可能已被移除,或其名称已更改,或暂时不可用.请检查以下 URL 并确保其拼写正确. 请求 ...

  3. mvc中的action验证登录(ActionFilterAttribute)

    方法一 :  1.创建一个全局action过滤器  (在appstart  的filterconfig中注册   filters.Add(new LoginAttribute());)  2.不需要登 ...

  4. ASP.NET MVC中在Action获取提交的表单数据方法总结 (4种方法,转载备忘)

    有Index视图如下: 视图代码如下: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Mas ...

  5. ASP.NET MVC中在Action获取提交的表单数据方法

    有Index视图如下: 视图代码如下: <%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Mas ...

  6. MVC中@Html.Action的用法

    MVC项目中如果有公共部分的代码就可以单独拿出来作为控件来用(比如头部和底部代码).跟ASP.NET中的ASCX实现的效果一样,但MVC比它方便的多. 想要实现该效果,需要知道@Html.Action ...

  7. MVC中@Html.Action的用法(类似自定义控件)

    MVC项目中如果有公共部分的代码就可以单独拿出来作为控件来用(比如头部和底部代码).跟ASP.NET中的ASCX实现的效果一样,但MVC比它方便的多. 一.@Html.Action的用法 @Html. ...

  8. .NET MVC中登陆授权过滤器的使用

    1.写个类LoginAuthorityAttribute,继承自AuthorizeAttribute using System; using System.Collections.Generic; u ...

  9. mvc中在Action里调用另一个Action

    今天做东西时发现一个新东西.即在一个Action调用另一Action.前提是同一个控制器.(没在一个控制里的没试过) 调用方法: public   ActionResult Test1(){ //to ...

随机推荐

  1. LeetCode 复原IP地址(探索字节跳动)

    题目描述 给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式. 示例: 输入: "25525511135" 输出: ["255.255.11.135&qu ...

  2. 转载: Windows下两种iocp实现的差距

    转自:http://blog.csdn.net/oldworm/article/details/6171430 之前几天说过,因为经典iocp实现(以下简称经典实现)多个io线程绑定在一个iocp上, ...

  3. easyUI之validatebox验证框

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <hea ...

  4. SpringMVC整合Springfox-Swagger

    https://www.jianshu.com/p/ab10860945c3 验证通过 关于Swagger的简介就不占篇幅了... 本文使用的Springfox-Swagger版本为2.8.0 要整合 ...

  5. .net 分布式锁实现

    摘要: .net分布式锁,包括redis分布式锁和zookeeper分布式锁的.net实现. 分布式锁在解决分布式环境下的业务一致性是非常有用的. 分布式锁 经常用于在解决分布式环境下的业务一致性和协 ...

  6. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-4.后端项目分层分包及资源文件处理

    笔记 4.后端项目分层分包及资源文件处理     简介:项目基本目录结构,包名称建立,配置文件建立 1.基本目录结构                 controller             se ...

  7. java使用nio(Paths,Files)遍历文件目录,转成java.io.File

    String directory = "C:\\Users\\Administrator\\AppData\\Local\\Temp\\8ad088a2-0bb3-41dc-89d9-2c5 ...

  8. 数据分析电子商务B2C全流程_数据分析师

    数据分析电子商务B2C全流程_数据分析师 目前,绝大多数B2C的转化率都在1%以下,做的最好的也只能到3.5%左右(比如以卖图书为主的当当) 我想,所有的B2C都会关心三个问题:究竟那97%去了哪里? ...

  9. Spark读取HDFS中的Zip文件

    1. 任务背景 近日有个项目任务,要求读取压缩在Zip中的百科HTML文件,经分析发现,提供的Zip文件有如下特点(=>指代对应解决方案): (1) 压缩为分卷文件 => 只需将解压缩在同 ...

  10. 求帮助 html5三次贝塞尔曲线问题

    <!DOCTYPE html><html><head><meta charset="utf-8"> <title>can ...