zoukankan      html  css  js  c++  java
  • 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>

  • 相关阅读:
    windows 开发 数据模版 Itemtemp
    windows 8 获取用户账号信息
    从客户端中检测到有潜在危险的 Request.Form 值解决方法
    asp.net异步处理
    知道web.config 中的 urlMappings怎么用?
    .net c#日期时间函数大全
    设计模式学习心得之工厂类模式(一)简单工厂模式
    远程网页内容抓取
    TreeView数据绑定的方法(1)
    URLRewriter.dll asp.net伪静态
  • 原文地址:https://www.cnblogs.com/dxmfans/p/9434746.html
Copyright © 2011-2022 走看看