Mvc全局过滤器与Action排除

http://blog.csdn.net/shuaihj/article/details/53020428

如何一次性给所有action做登录验证过滤,如何排除不需要做登录验证的action?

1. 如何让某个Action未登录就不能执行?

先封装一个判断是否登录的函数。

目标Action中调用这个函数,如果未登录,跳转登录Action

2. 如果Controller中有很多Action都要处理怎么办?

可以自定义一个过滤器

给每个需要做登录检查的action打上这个标签

3. 这样还是麻烦,每个Action都要打标签吗?

也可以给Controller这个层级打标签,对内部所有Action都有效

4. 如果项目中有很多Controller,每个都要打一遍吗?

有两个方法:

4.1.声明一个BaseController:Controller,在这个基类上打标签

让需要做登录验证的Controller都继承自BaseController

4.2使用全局过滤器

应用启动的时候注册全局过滤器,会对所有Controller的Action起作用

5. 可是我的首页和登录Action是不需要做过滤的,怎么排除?

修改过滤器,增加一个是否需要检查的属性

只给不需要做检查的Action或者Controller打上不需要做检查的标签即可

全局过滤器注册的时候,要注册为需要检查

6. 回头审视一下我们的基类BaseController

继承自Controller类,它本身已经继承了IActionFilter接口,我们只要override这个接口的方法,就可以了。所有继承自这个基类的Controller就都可以做登录验证了,基类也不需要打标签了,相当于把过滤器的业务逻辑,转移到这个方法中:

在子类中控制是否需要做登录检查

这个方法的问题是:没有办法对子类的Action单独控制是否做检查。

非要做也可以,那就要再定义一个标签Atrribute,来标识不需要检查,在BaseController父类中通过反射检查action是否打了这个不需要检查的标签。

但是这样有点绕了,不如用全局过滤器方便!

时间: 2024-10-05 20:22:09

Mvc全局过滤器与Action排除的相关文章

ASP.NET MVC 全局过滤器(FilterConfig)、标记在控制器上和方法上的筛选器执行顺序

原文:ASP.NET MVC 全局过滤器(FilterConfig).标记在控制器上和方法上的筛选器执行顺序 FilterConfig->控制器上的筛选器-->方法上的筛选器(大-->小,上-->下) 全局-->控制器->个别 尝试的时候记得把返回true 1 protected override bool AuthorizeCore(HttpContextBase httpContext) 2 { 3 //return base.AuthorizeCore(httpC

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

前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的OnInit()方法,在OnInit()中判断Session中是否有用户登录的信息. /// <summary> /// 公共基类里面干一些公共的事情 /// </summary> public class BasePage : System.Web.UI.Page { //页面生命周

MVC下用户登录状态校验的问题以及解决方案--------------Action全局过滤器的使用

前言当我们访问某个网站的时候需要检测用户是否已经登录(通过Session是否为null),我们知道在WebForm中可以定义一个BasePage类让他继承System.Web.UI.Page,重写它的OnInit()方法,在OnInit()中判断Session中是否有用户登录的信息 1 /// <summary> 2 /// 公共基类里面干一些公共的事情 3 /// </summary> 4 public class BasePage : System.Web.UI.Page 5

asp.net mvc 全局权限过滤器及继成权限方法

全局权限过滤器 //----------------------------------------------------------------------- // <copyright file="PermissionFilter.cs" company="STO EXPRESS, Ltd."> // Copyright (c) 2015 , All rights reserved. // </copyright> //--------

实现MVC自定义过滤器,自定义Area过滤器,自定义Controller,Action甚至是ViewData过滤器

MVC开发中几种以AOP方式实现的Filters是非常好用的,默认情况下,我们通过App_Start中的FilterConfig来实现的过滤器注册是全局的,也就是整个应用程序都会使用的,针对单独的Filter我们不得不去单独的Controller或者Action去定义 如图: 那么问题来了,我现在想在FitlerConfig里面去维护所有的过滤器,但是又想实现自定义的过滤器该咋搞,MVC默认不支持! 我们先来看看,MVC默认的Fitlers注册是怎样的官方源码:GlobalFilterColle

asp.net core MVC 全局过滤器之ExceptionFilter过滤器(一)

本系类将会讲解asp.net core MVC中的内置全局过滤器的使用,将分为以下章节 asp.net core MVC 过滤器之ExceptionFilter过滤器(一) asp.net core MVC 过滤器之ActionFilter过滤器(二) asp.net core MVC 过滤器之ResultFilter过滤器(三) asp.net core MVC 过滤器之ResourceFilter过滤器(四) asp.net core MVC 过滤器之AuthorizationFilter过

MVC 全局异常过滤器HandleErrorAttribute

using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc; namespace 过滤器.Filtes{ /// <summary> /// 全局异常过滤器/// </summary> public class MyHandleErrorAttribute:HandleErrorAttribute { public override voi

【转载】ASP.NET MVC的过滤器

APS.NET MVC中(以下简称“MVC”)的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理.这时候就用到了过滤器. MVC支持的过滤器类型有四种,分别是:Authorization(授权),Action(行为),Result(结果)和Exception(异常).如下表, 过滤器类型 接口 描述 Authorization IAuthorizationFilter 此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法 Exce

学一学MVC的过滤器--异常处理

学习MVC不久,看到公司的项目里有日志记录功能,出于自己的原因一直没有看看是如何实现的,后来看了个学习视频和一些博文,才发现采用MVC里的过滤器 Filter 可以很容易实现,比较常见也很容易的做法就是继承  IActionFilter,IExceptionFilter 接口,然后实现里面的方法即可. 下面看一下代码,这是公司项目的一段代码,主要是将项目中出现的异常记录在 每天的txt日志文件里.当然实现日志的方法有很多种,这个只是其中一种,如果出现了IO错误,这种方法就不好说啦.  publi