zoukankan      html  css  js  c++  java
  • 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.自定义动作过滤器属性

  • 相关阅读:
    Linux 学习 step by step (2)
    公共建筑能耗监测平台的GPRS通讯服务器的开发方法分享
    幸福框架:可扩展的、动态的、万能的 编号生成器
    C++ Data Member内存布局
    .NET程序集强命名删除与再签名技术 源代码剖析
    hdu 2191(多重背包)
    五种情况下会刷新控件状态(刷新所有子FWinControls的显示)——从DFM读取数据时、新增加子控件时、重新创建当前控件的句柄时、设置父控件时、显示状态被改变时
    终于懂了:Delphi消息的Result域出现的原因——要代替回调函数的返回值!(MakeObjectInstance不会帮助处理(接收)消息回调函数的返回值)
    Firemonkey实现Mac OS程序中内嵌浏览器的功能(自己动手翻译,调用苹果提供的webkit框架)
    感悟:市场经济看得就是主观能动性,有则富贵可及,无则无限趋于零
  • 原文地址:https://www.cnblogs.com/meetyy/p/3460632.html
Copyright © 2011-2022 走看看