八、动作过滤器

有时在运行Action之前或之后会需要运行一些逻辑运算,以及处理一些运行过程中所生成的异常状况,为了满足这个需求,ASP.NET MVC提供动作过滤器(Action Filter)来处理这些需求。

动作过滤器属性可以套用在Action之上,也可以套用在Controller类上,若动作过滤器属性套用在Controller类上等于套用此属性在此Controller的所有Action之上。

1.授权过滤器属性

授权过滤属性(Authorization Filter)是在ASP.NET MVC运行Controller与Action之前最早运行的过滤器,可用来对Action在正式运行前做一些额外的判断,例如,授权检查、是否为SSL安全联机、验证输入信息是否包含XSS攻击字符串等等。

(1)Authorize属性

Authorize属性可用来与ASP.NET框架的Membership或FormsAuthentication机制配合使用,当你登录会员,拥有会员身份或角色后,可以设置此Action必须符合哪些用户或角色的要求才能运行特定Action,如果授权验证失败,就会被自动导入登录页面,此部分机制与ASP.NET Web Form的用户验证时一模一样的。

        [Authorize(Users = "Tom,Mary")]
public ActionResult Edit(int id)
{
return View();
}
       [Authorize(Roles="Admin")]
public ActionResult Edit(int id)
{
return View();
}

在Web.config的<system.web>设置下包括一个<authentication>设置,其中的<forms>有个loginUrl可设置当权限不足时应该转向的地址:

    <authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="" />
</authentication>

(2)AllowAnonymous属性

AllowAnonymous属性通常与Authorize属性搭配使用,如下代码段所示。

    [Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
//
// GET: /Account/Login [AllowAnonymous]
public ActionResult Login(string returnUrl)
{
ViewBag.ReturnUrl = returnUrl;
return View();
}

我们将Authorize属性套用在控制器层级,这意味着该控制器中所有Action都将受到Authorize属性的影响。如果希望在该控制器中设置几个Action拥有例外,也就是在不登录的情况下也可以运行Action,那么这时你就可以套用AllowAnonymous属性。AccountController中除了Login动作,都不应该被匿名访问。

(3)ChildActionOnly属性

ASP.NET MVC的View相关技术有个Html.RenderAction辅助方法,通过这个方法可以在View中再次发出另一个子请求,再运行一次ASP.NET MVC的运行过程,让其运行完后回传的HTML结果再插入到View中。

这个子要求所运行的Action其实跟通用Action差不多,但如果你希望要通过RenderAction运行的Action只允许通过Html.RenderAction辅助方法运行的话,就可以套用这个属性,演示程序如下。

        [ChildActionOnly]
public ActionResult GetBanner()
{
return Content("<img src=\"/Content/Banner1jpg\" />");
}

(4)RequiredHttps属性

(5)ValidateInput属性

(6)ValidateAntiForgeryToken属性

ValidateAntiForgeryToken属性时ASP.NET MVC为了预防跨网站造假点击(Cross-Site Request Forgery, CSRF)的攻击而生成的。

        [ValidateAntiForgeryToken]
public ActionResult ComplexModelBinding(GuestbookForm form1)
{
//...
}
@using(Html.BeginForm())
{
@Html.LabelFor(x=>x.Name)
@Html.TextBoxFor(x=>x.Name)
@Html.ValidationMessageFor(x=>x.Name)
<br /> @Html.AntiForgeryToken() <input type="submit" />
}

2.动作过滤器属性

(1)ActionFilter属性

(2)AsyncTimeout属性

(3)NoAsyncTimeout属性

3.结果过滤器属性

4.例外过滤器属性

5.自定义动作过滤器属性

MVC-03 控制器(5)的更多相关文章

  1. ASP.NET MVC 5 - 控制器

    MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...

  2. .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  3. MVC 在控制器中获取某个视图动态的HTML代码

    ASP.NET MVC 在控制器中获取某个视图动态的HTML代码   如果我们需要动态的用AJAX从服务器端获取HTML代码,拼接字符串是一种不好的方式,所以我们将HTML代码写在cshtml文件中, ...

  4. 三、ASP.NET MVC Controller 控制器(二:IController控制器的创建过程)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC IControllerFactory 控制器工厂接口 3.ASP.NETMVC DefaultControllerFactory 默认控制器工厂 4 ...

  5. c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作

    ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...

  6. [转]ASP.NET MVC 5 - 控制器

    MVC代表: 模型-视图-控制器 .MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程序包含: · Models: 表示该应用程序的数据并使用验证逻辑来强制实施业务规则的数据 ...

  7. ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道

    ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 03. 服务注册和管道 语雀: https://www.yuque.com/yuejiangliu/dotnet/ ...

  8. Spring MVC(三)--控制器接受普通请求参数

    Spring MVC中控制器接受参数的类方式有以下几种: 普通参数:只要保证前端参数名称和传入控制器的参数名称一致即可,适合参数较少的情况: pojo类型:如果前端传的是一个pojo对象,只要保证参数 ...

  9. .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)

    阅读目录: 1.开篇介绍 2.ASP.NETMVC Controller 控制器的入口(Controller的执行流程) 3.ASP.NETMVC Controller 控制器的入口(Controll ...

  10. C# MVC ( 将控制器的实体类注册到视图 )

    (1)控制器  代码 using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...

随机推荐

  1. JavaScript 开发经验整理

    前言 今年接触了一个B/S的项目,总结了一些JavaScript开发经验,整理些有用的内容与大家分享. 本文会持续更新... 1.实现代码访问的控制 随着项目JavaScript代码库扩大,本应被控制 ...

  2. Dearmweaver CS6 如何添加emmet 插件

     一.关于emmet插件 已经接触前端工具的小伙伴们早听说过这个插件的鼎鼎大名了吧,emmet可以说是前端工程师的利器,就连老牌dreamweaver 都可以支持,我们怎么好意思拒绝这个好东西呢? 有 ...

  3. Java中使用Observer接口和Observable类实践Observer观察者模式

    在Java中通过Observable类和Observer接口实现了观察者模式.实现Observer接口的对象是观察者,继承Observable的对象是被观察者. 1. 实现观察者模式 实现观察者模式非 ...

  4. DataSet和DataTable详解

    先构建一个结构与用户请求数据结构相同的DataTable,然后将用户的请求数据填充到构建好的DataTable中,最后将DataTable添加到DataSet中. DataTable,,DataCol ...

  5. 浅谈Spring(一)

    一.Spring引言 Spring是一款轻量级框架,代码入侵量很小,并且还是众多优秀的设计模式的组合(工厂.代理.模板.策略). 特点: 1.方便解耦,简化开发 通过Spring提供的IoC容器,我们 ...

  6. DataGridView插入一行数据和用DataTable绑定数据2种方式

    以前不会用DataGridView的时候一直使用DataTable绑定的方式,如下: DataTable table = new DataTable(); //给表添加一列Name,此名字和 tabl ...

  7. php ZIP压缩类实例分享

    php ZIP压缩类实例分享 <?php $zipfiles =array("/root/pooy/test1.txt","/root/pooy/test2.txt ...

  8. Struts2拦截器总结

    拦截器的本质: 拦截器就是一个类,一个实现了超级接口Interceptor的类.Interceptor接口里定义了三个方法 init(),destory(),intercept().其中inercep ...

  9. html+css基础

    完整的HTML结构 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://w ...

  10. python2.7_1.14_编写一个简单的回显客户端/服务器应用

    1.服务端 server.py # -*- coding: utf-8 -*- import socket import argparse host = 'localhost' data_payloa ...