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)如图

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

目录
打赏
0
0
0
0
1
分享
相关文章
|
10月前
javaWeb过滤器Filter(一)
javaWeb过滤器Filter(一)
|
10月前
javaWeb过滤器Filter(二)
javaWeb过滤器Filter(二)
JavaWeb-Filter过滤器
Filter过滤器 1. Filter的生命周期 2.Filter的配置 3.拦截路径 4.拦截具体的使用 5.拦截方式配置(资源被访问方式) 6.FilterChain拦截链
107 0
JavaWeb中Filter&Listener的神奇作用
Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。 如下图所示,浏览器可以访问服务器上的所有的资源(servlet、jsp、html等)
104 0
四:net core(.NET 6)使用Filter过滤器拦截webapi方法
Filter的基本用法 :代码在最下方使用filter过滤器,来实现拦截接口信息。咱们先新建一个项目,在原有的webapi上面,选择添加项目,添加一个类库项目
1398 0
四:net core(.NET 6)使用Filter过滤器拦截webapi方法
Spring Security 匹配Restful url
Spring Security 匹配Restful url
347 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等