【问题标题】:Unable to get request header in asp net core web API无法在 asp net core web API 中获取请求标头
【发布时间】:2017-07-10 18:00:49
【问题描述】:

我正在尝试在 asp net core web api 中创建一个自定义过滤器,如下所示,但无法获取标题信息。

internal class BasicAuthFilterAttribute : ActionFilterAttribute
{
  private StringValues xyz;

  public override void OnActionExecuting(ActionExecutingContext actionContext)
  {
    var authHeader = actionContext.HttpContext.Request.Headers.TryGetValue("Basic", out xyz);           
  }
}

TryGetValue 总是返回 false 但是我可以看到 Headers 包含“基本”标题。由于我是 ASP.NET Core 的新手,所以谁能指导我我可能做错了什么?

标题如下所示。

【问题讨论】:

  • 也许你应该在键中检查“基本”,而不是在值中?
  • @AleksejVasinov 谢谢,你的正确键应该是“授权”而不是“基本”。
  • 左边是key,右边是value。

标签: c# asp.net-core asp.net-web-api2


【解决方案1】:
var xyz = context.HttpContext.Request?.Headers["Basic"];

【讨论】:

  • 这是不正确的。标头应该是授权。
【解决方案2】:

感谢大家的宝贵意见,但以下代码按预期工作。

actionContext.HttpContext.Request.Headers.TryGetValue("Authorization", out authorizationToken);

【讨论】:

  • 如果你使用C# 7,你可以跳过声明变量:actionContext HttpContext.Request.Headers.TryGetValue("Authorization", out var unittId);
  • 如果检查空值认为返回了StringValues对象,并且虽然它具有隐式类型转换,但需要使用例如if (authorization == StringValues.Empty)
【解决方案3】:

这个怎么样?我们应该接受新的变量。 :)

bool tryGetValue = actionContext.ActionArguments.TryGetValue("data", out data);

【讨论】:

    【解决方案4】:
    public static class HttpRequestExtension
    {
        public static string GetHeader(this HttpRequest request, string key)
        {
            return request.Headers.FirstOrDefault(x => x.Key == key).Value.FirstOrDefault();
        }
    }
    

    调用方法:

     var Authorization = Request.GetHeader("Authorization");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2021-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 2016-03-12
      • 2019-01-19
      相关资源
      最近更新 更多