• MVC-03 控制器(5)


    八、动作过滤器

        有时在运行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="2880" />
        </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.自定义动作过滤器属性

  • 相关阅读:
    Sysenter/Kifastcallentry hook 检测与恢复
    几种Windows进程通信
    漫谈IRP
    RC4加密算法
    在线考试系统基础模块开发(RBAC)
    在线考试系统项目环境搭建
    在线考试系统考试模块完善
    在线考试系统题库管理
    在线考试系统数据统计模块
    在线考试系统在线考试模块
  • 原文地址:https://www.cnblogs.com/meetyy/p/3460632.html
Copyright © 2020-2023  润新知