5.WebAPI的Filter

简介: 1.WebApi的Filter介绍:大家知道什么是AOP(aspect oriented programming)吗?它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。

1.WebApi的Filter介绍:

大家知道什么是AOP(aspect oriented programming)吗?它是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。它是一种新的方法论,它是对传统OOP(object oriented programming)编程的一种补充。OOP是关注将需求功能划分为不同的并且相对独立,封装良好的类,并让它们有着属于自己的行为,依靠继承和多态等来定义彼此的关系;AOP是希望能够将通用需求功能从不相关的类当中分离出来,能够使得很多类共享一个行为,一旦发生变化,不必修改很多类,而只需要修改这个行为即可。AOP是使用切面(aspect)将横切关注点模块化,OOP是使用类将状态和行为模块化。在OOP的世界中,程序都是通过类和接口组织的,使用它们实现程序的核心业务逻辑是十分合适。但是对于实现横切关注点(跨越应用程序多个模块的功能需求)则十分吃力,比如日志记录,权限验证,异常拦截等。而Filter恰好体现的AOP思想(也可以说是一夫当关万夫莫开了)。

2.Filter的功能主要有:

(1)验证用户是否登录,如果用户没有登录,系统直接跳转到登录页面。

(2)权限控制。

(3)记录日志。

(4)异常处理。

3.Filer权限控制实现:

项目结构如图

 (1)创建一个webapi项目并添加控制器

public class LoginController : ApiController
    {
        [HttpGet]
        public string ToLogin(string username)
        {
            return username+",你好登录成功!";
        }
    }
View Code

(2)添加MyAuthorFilter类

public class MyAuthorFilter : IAuthorizationFilter
    {
        public bool AllowMultiple
        {
            //get { throw new NotImplementedException(); }
            get { return true; }
        }
        public async Task<HttpResponseMessage> ExecuteAuthorizationFilterAsync(HttpActionContext actionContext, CancellationToken cancellationToken, Func<Task<HttpResponseMessage>> continuation)
        {
            IEnumerable<string> values;
            if (actionContext.Request.Headers.TryGetValues("UserName", out values))
            {
                string userName = values.FirstOrDefault();
                if (userName != "ych")
                {
                    return new
                HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
                }
            }
            else
            {
                return new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized);
            }
            return await continuation();
        }


    }
View Code

(3)设置路由保证被注册

public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Filters.Add(new MyAuthorFilter());
        }
View Code

请求结果:

4.Filer异常处理实现:

项目结构如图

 (1)创建一个webapi项目并添加控制器

public class LoginController : ApiController
    {
        [HttpGet]
        public string ToLogin(string username)
        {
            throw new Exception("抛异常," + username);
        }
    }
View Code

(2)添加MyExceptionFilter类

public class MyExceptionFilter : IExceptionFilter
    {
        //public bool AllowMultiple=>true;
        public bool AllowMultiple
        {
            get { return true; }
        }
        public async Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken)
        {
            Exception ex = actionExecutedContext.Exception;
        }
    }
View Code

(3)设置路由保证被注册

public static void Register(HttpConfiguration config)
        {
            // Web API 配置和服务

            // Web API 路由
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );
            config.Filters.Add(new MyExceptionFilter());
        }
View Code

(4)用postman请求(http://localhost:43417/api/Login/tologin?username=qq)如图

这样就讲完了,你可以自己将异常什么的记录日志哦,活学活用才是硬道理!

目录
相关文章
|
10月前
|
Java 程序员 应用服务中间件
JavaWeb之过滤器(Filter)与监听器(Listener)
本文介绍了JavaWeb中的过滤器(Filter)和监听器(Listener)概念及其使用。过滤器主要用于拦截和处理Web资源请求,如进行编码设置、权限验证等,它在Servlet之前和之后执行。监听器则监听域对象(如ServletRequest、HttpSession、ServletContext)状态变化,分为创建/销毁监听和属性变化监听。监听器在Web.xml中注册后会在相应事件发生时自动执行,例如用于统计网站访问人数或初始化配置。
|
10月前
|
索引
说说 Elasticsearch filter 和 post_filter 的区别?
说说 Elasticsearch filter 和 post_filter 的区别?
106 0
|
设计模式 监控 前端开发
JavaWeb中的Filter过滤器和Listener监听器
JavaWeb中的Filter过滤器和Listener监听器
|
Java 应用服务中间件
JavaWeb中Filter&Listener的神奇作用
Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 如下图所示,浏览器可以访问服务器上的所有的资源(servlet、jsp、html等)
106 0
|
应用服务中间件
【JavaWeb】快速学习Filter&Listener(二)
【JavaWeb】快速学习Filter&Listener(二)
|
存储 前端开发 Java
【JavaWeb】快速学习Filter&Listener(一)
【JavaWeb】快速学习Filter&Listener(一)
|
存储 前端开发 Java
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(一)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(一)
132 0
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(一)
|
XML 存储 前端开发
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(二)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(二)
114 0
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(二)
|
XML JSON JavaScript
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(三)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(三)
《JavaWeb篇》11.Filter&Listener&Ajax看这一篇就够了(三)
|
Java 容器
JavaWeb之Filter和Listener
JavaWeb之Filter和Listener
165 0