H5W3
当前位置:H5W3 > 问答 > 正文

请问在.net core webapi中多层保存传递当前用户信息,有什么好的处理方式?

举例:请求时,会在请求header中携带用户身份信息,在请求后续处理中,会经常用到用户身份信息,在多层中怎么样避免一层一层传递

回答

我是用JWT /// <summary>
/// 重写过滤器
/// </summary>
/// <param name=”context”></param>
public void OnActionExecuting(ActionExecutingContext context)
{
ReturnModel ret = new ReturnModel();
if (context.HttpContext.Request.Headers.ContainsKey(“access_token”))
{
//获取token
// object tokenobj = context.ActionArguments[“token”];//请求参数获取,用地址栏的参数 还需要加验证
object tokenobj = context.HttpContext.Request.Headers[“access_token”].ToString();//请求头里面获取
string token = tokenobj.ToString();

            string loginID = "";
            //验证jwt,同时取出来jwt里边的用户ID
            TokenType tokenType = tokenHelper.ValiTokenState(token, a => a["iss"] == "QmWyy" && a["aud"] == "HospEveryCus", action => { loginID = action["Id"]; });
            if (tokenType == TokenType.Fail)
            {
                ret.Code = 202;
                ret.Msg = "access_token验证失败";
                context.Result = new JsonResult(ret);
                return;
            }
            if (tokenType == TokenType.Expired)
            {
                ret.Code = 205;
                ret.Msg = "access_token已经过期";
                context.Result = new JsonResult(ret);
            }
            if (!string.IsNullOrEmpty(loginID))
            {
                //给控制器传递参数(需要什么参数其实可以做成可以配置的,在过滤器里边加字段即可)
                 context.ActionArguments.Add("patientId", loginID);//存储当前客户的ID
            }
        }
        else
        {

            ret.Code = 401;
            ret.Msg = "没有令牌,禁止访问";
            context.Result = new JsonResult(ret);
            return;
        }
    }

本文地址:H5W3 » 请问在.net core webapi中多层保存传递当前用户信息,有什么好的处理方式?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址