c# - 获取请求的 Authorization header 值的最简单方法是什么?

标签 c# asp.net .net http asp.net-core

问题

给定一个 HttpRequest Authorization header ,获取所述 header 的身份验证类型身份验证凭据的最简单方法是什么?

例如,给定Authorization: Bearer YWxhZGRpbjpvcGVuc2VzYW1l , 我怎样才能同时获得 BearerYWxhZGRpbjpvcGVuc2VzYW1l来自 HttpRequest

是的,我知道存在身份框架。我不在这里使用它。如果你真的想尝试改变我的想法,我们可以讨论它 in chat .

我尝试了什么

我正在按照以下方式编写一个函数:

var authorizationHeader = request.Headers["Authorization"].ToArray()[0];
var authorizationParts = authorizationHeader.Split(' ');
if (authorizationParts.Length == 2 && authorizationParts[0] == "Bearer")
{
    var tokenValue = authorizationParts[1];
    // ...
}
// ...

但它非常容易出错且冗长。例如,在第一行中,我没有检查数组是否至少包含一个元素。

最佳答案

这里有一些简单的中间件可以做到这一点:

app.Use(async (context, next) =>
{
    if (context.Request.Headers.ContainsKey("Authorization") &&
        context.Request.Headers["Authorization"][0].StartsWith("Bearer "))
    {
        var token = context.Request.Headers["Authorization"][0]
            .Substring("Bearer ".Length);
        //do stuff...
    }

    await next.Invoke();
});

虽然我个人不太关心冗长,但将上面的内容移至扩展名并使其更冗长,例如通过更明确地说明你在做什么:

if (!context.Request.Headers.ContainsKey("Authorization"))
    throw new SomeException(); //or whatever

var authHeader = context.Request.Headers["Authorization"][0];
if (authHeader.StartsWith("Bearer "))
{
    var token = authHeader.Substring("Bearer ".Length);
    //do stuff...
}

关于c# - 获取请求的 Authorization header 值的最简单方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45099051/

相关文章:

.net - 从数据库中获取大约一百万条记录的最佳方法是什么?

c# - INotifyPropertyChanged 困惑

c# - 设置 FOREACH 中项目的顺序

c# - 如何从 .t​​t 文件(T4 模板)的 web.config 中读取 appSetting

asp.net - 使用 IE 通过 https(SSL) 导出到 excel 在 asp.net 网站中不起作用

c# - nuget 无法识别已安装的包

c# - 是否可以在 ASP.NET 中直接写入/读取 TCP 流?

c# - 为什么我在 C# 中调试时得到一个空白表单?

c# - Execute Scalar、Execute Reader 和 Data Set 在哪里使用?

c# - 仅更新 html 时,ASP.NET Razor View 不会更新