无法在ASP.NET Core Web API中获取请求头

41

我正在尝试在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 包含 "Basic" 标头。由于我在 ASP.NET Core 上是新手,请问有人能指导我可能做错了什么吗?

这是 headers 的样子。 enter image description here


1
也许你应该检查键中的“Basic”,而不是值? - Aleksej Vasinov
@AleksejVasinov 谢谢,你是对的,键应该是“Authorization”而不是“Basic”。 - Jyotish Singh
左边是键,右边是值。 - Joel Harkes
4个回答

64

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

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

22
如果您使用C# 7,可以跳过变量声明: actionContext.HttpContext.Request.Headers.TryGetValue("Authorization", out var unittId); - Andrei Drynov
1
如果要检查空值,请考虑返回一个 StringValues 对象,尽管它具有隐式类型转换功能,但仍需要使用例如 if (authorization == StringValues.Empty) - conceptdeluxe

3
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");

2
这个怎么样?我们应该拥抱新变量。 :)
bool tryGetValue = actionContext.ActionArguments.TryGetValue("data", out data);

0
var xyz = context.HttpContext.Request?.Headers["Basic"];

这是不正确的。标题应为Authorization。 - StarLord

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接