Net Core初步使用过滤器,中间件

前言

一个新的Net Core项目,如果要对外进行开放的接口的话,我们肯定是有做一个自己的一个接口校验信息,进行接口验签处理,要是不满足我们的加密格式,我们肯定是不允许进行进行访问的 ,所以这个时候就用到了拦截器进行处理。
我们不可能在每个接口都从新写一个验证方式吧,这样可不灵活的,接下来就是讲一下我对拦截器的一些看法。

详细介绍

ActionFilter

简介

使用过MVC的朋友门应该会比较熟悉这个,在Framework使用中 这个个更多的是特性的使用,而在Net Core使用的时候就不一样了,接下来我来说一说

使用,示例,说明

我们先讲使用的方式,Net Core使用都需要在启动文件进行一个配置(Startup.cs)

        public void ConfigureServices(IServiceCollection services)
        { 
            //添加对应的拦截器信息
            services.AddMvc(options =>
            {
                options.Filters.Add<ActionFilter>();
            });
            //.....
		}
 	/// <summary>
    /// MVC中的Action过滤器    这个类的位置可以按照你的规则放
    /// 这个地方进行数据格式的校验   一般检查参数是否规范
    /// </summary>
    public class ActionFilter : IActionFilter
    {
        /// <summary>
        /// 验证对应的信息
        /// </summary>
        /// <param name="context"></param>
        public void OnActionExecuting(ActionExecutingContext context)
        {

            //校验接口参数是否有传递
            if (!context.ModelState.IsValid)
            {
                ActionResult result = new ActionResult() { code = 0, msg="Action验证失败" };

                foreach (var item in context.ModelState.Values)
                {
                    foreach (var error in item.Errors)
                    {
                        result.msg += error.ErrorMessage + "|";
                    }
                }
                context.Result = new JsonResult(result);
            }
        }

        public void OnActionExecuted(ActionExecutedContext context)
        {

        }
    }

ApiAuthorizeFilter

简介

一般是用来处理WebApi接口的,校验相关的token是否正确,以及根据token获取或者存储用户信息,用户唯一

示例,使用

		//使用方式类似anction拦截器
        public void ConfigureServices(IServiceCollection services)
        { 
            //添加对应的拦截器信息
            services.AddMvc(options =>
            {
                options.Filters.Add<ApiAuthorizeFilter>();
            });
            //.....
		}

    /// <summary>
    /// Api接口拦截器
    /// </summary>
    public class CUMSApiAuthorizeFilter : IAuthorizationFilter
    {

        public CUMSApiAuthorizeFilter()
        {

        }
        /// <summary>
        /// 只判断参数是否正确,不判断权限
        /// </summary>
        /// <param name="context"></param>
        public void OnAuthorization(AuthorizationFilterContext context)
        {
            #region   校验参数是否正确
            ApiResult result = new ApiResult() { code = 0, msg = "Api验证失败" };
             
            #region   API接口校验  校验信息  校验token,或者用户id
			//根据对应的信息进行一个判断处理    逻辑暂时不写了
            #endregion
 
            return;
            #endregion
        }
    }

中间件

说明

中间件的用法可以有很多种,我个人感觉这个换成一种说法会比较容易理解,相当于Framework中的通道模型(HttpModel),期间可以完成的事情就有很多了。
比如 URL伪静态处理啊,搞一个谁也看不懂 的规则(手动笑哭)

代码展示

		//使用方式不一样了  添加的位置要改变了
 		/// <summary>
        /// 中间件启动类
        /// </summary>
        /// <param name="app"></param>
        /// <param name="env"></param>
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            //拦截器中间件
            app.UseMiddleware<ValidateMiddleware>(); 
        }
	
    /// <summary>
    /// 中间件校验信息    类似Framework中的HttpModel  管道模型
    /// </summary>
	public class ValidateMiddleware
    {
        private readonly RequestDelegate _nextDelegate;

        /// <summary>
        /// 
        /// </summary>
        /// <param name="nextDelegate"></param>
        public ValidateMiddleware(RequestDelegate nextDelegate)
        {
            _nextDelegate = nextDelegate;
        }


        /// <summary>
        /// 处理对应的参数信息  进行拦截校验信息
        /// </summary>
        /// <param name="httpContext">拦截HTTP请求处理</param>
        /// <returns></returns>
        public async Task Invoke(HttpContext httpContext)
        {
        	//这个地方可以获取到HttpContext   这个时候 你想干啥都可以 做自己想要实现的功能就好了 
        	
            //返回执行下一个中间件的处理    不能去掉  去掉参数就会丢失
            await _nextDelegate.Invoke(httpContext);
        } 
    }

尾语

慢慢的参与进去发现,Net Core 除了配置起来会麻烦一些,使用的时候,整体是和MVC相似的 ,有些原理是一样的。
但是Net Core用起来就会很舒服,好像是自我感觉的呢。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值