• MVC 身份验证和异常处理过滤器


    两种使用方式:
    1自定义类继承自相应的类或接口,重写方法,作为特性使用
    2 在控制器类中重写方法

    特性方式的使用
    注意:如果继承自接口需要让类实现FilterAttribute,才可以作为特性使用
    使用方式1:作为ControllerAction的特性
    使用方式2:在Global中注册为全局过滤器,应用于所有的ControllerAction
    参数类均继承自ControllerContext,主要包含属性请求上下文、路由数据、结果

    using FilterExam.Fiter;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;


    namespace FilterExam.Controllers
    {
        public class HomeController : Controller
        {
            //[MyAuthorization]//第一种方式
            // GET: Home
            public ActionResult Index()
            {
                throw new Exception();//调用异常验证过滤器
                return View();
            }


            public ActionResult Show()
            {
                return View();
            }

    //第二种方式
            protected override void OnAuthorization(AuthorizationContext filterContext)
            {
                filterContext.HttpContext.Response.Write("456");
            }

        }
    }


    //身份验证过滤器

    在约束的Action执行前执行
    重写OnAuthorization方法
    如果不想使用默认的身份验证方式,需要将base.***删除
    如果想进行跳转,需要设置上下文对象的Result属性为new RedirectResult(string url);

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;


    namespace FilterExam.Fiter
    {
        public class MyAuthorization:AuthorizeAttribute
        {
            public override void OnAuthorization(AuthorizationContext filterContext)
            {


               // filterContext.Result = new RedirectResult(UrlHelper.GenerateUrl("", "Loin", "UserInfo", null, null, null, false));


                filterContext.HttpContext.Response.Write("123");
            }
        }

    }

    //异常验证过滤器

    当发生异常时,用于进行自定义异步处理,如记录日志、跳转页面
    使用自定义异常处理,需要在web.config中为system.web添加<customErrors mode="On" />节点
    重写OnException方法,不要禁用base.***
    如果想进行跳转,需要设置上下文对象的Result属性为new RedirectResult(string url);

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;


    namespace FilterExam.Fiter
    {
        public class MyException:HandleErrorAttribute
        {
            public override void OnException(ExceptionContext filterContext)
            {
                base.OnException(filterContext);
                filterContext.Result = new RedirectResult("/Error/400.html");
            }
        }

    }

    //FilterConfig

    using FilterExam.Fiter;
    using System.Web;
    using System.Web.Mvc;


    namespace FilterExam
    {
        public class FilterConfig
        {
            public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                //filters.Add(new HandleErrorAttribute());
                //filters.Add(new MyAuthorization());
                filters.Add(new MyException());
            }
        }

    }


    <system.web>
        <customErrors mode="On"></customErrors>
        <authentication mode="None" />
        <compilation debug="true" targetFramework="4.5.2" />
        <httpRuntime targetFramework="4.5.2" />
      </system.web>

  • 相关阅读:
    mv 命令 简要
    mv 命令
    rmdir 命令
    rm 命令简要
    rm 命令
    mkdir 命令
    pwd 命令
    远程工具(SSH Secure)连接Centos出现中文乱码问题的解决办法
    (4)剑指Offer之链表相关编程题
    (4)剑指Offer之链表相关编程题
  • 原文地址:https://www.cnblogs.com/dxmfans/p/9434746.html
Copyright © 2020-2023  润新知