【问题标题】:Passing parameters from middleware to controller - asp.net core将参数从中间件传递到控制器 - asp.net core
【发布时间】:2018-12-15 18:51:27
【问题描述】:

我需要将一些参数从中间件传递到控制器,如果我必须注意性能、资源使用和安全性,我不知道应该使用哪种方法。

  • context.Items["user-id"] = "12345";
  • context.Session.SetInt32("user-id", 12345);

(无论如何都需要保持会话启用。)

【问题讨论】:

    标签: asp.net-core-2.0 asp.net-core-middleware


    【解决方案1】:

    您可以将其作为 http 标头与请求一起传递到管道中

    public class UserHeaderMiddleware  
    {
        private readonly RequestDelegate _next;
    
        public UserHeaderMiddleware(RequestDelegate next)
        {
            _next = next;
        }
    
        public async Task Invoke(HttpContext context)
        {
            context.Request.Headers.Add("user-id", new[] { userId.ToString() });
            await _next(context);
        }
    }
    

    【讨论】:

    • 显然这将是第三种选择,但这不是我要问的。
    • @MuhammadSaqib 是的,对不起。错过了你说你需要坚持会议。我把这个答案留在这里,因为它仍然有道理,IMO
    • 是的,您提供了第三种方法来做这件事,这对未来的访问者也有帮助。会话已经可用,我不需要坚持下去。我有两个(现在三个)选择将参数传输到控制器,我必须选择最好的一个。
    【解决方案2】:

    如果您需要存储用户 ID 以供将来使用,会话是您的最佳选择。 Items 只为该请求传递它。

    【讨论】:

      猜你喜欢
      • 2017-08-04
      • 1970-01-01
      • 2021-08-19
      • 2021-02-09
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 2016-08-14
      • 2021-12-05
      相关资源
      最近更新 更多