在专门解码base64string时,为什么需要首先转换为字节然后转换为string?

时间:2018-07-18 11:57:48

标签: c# asp.net .net asp.net-web-api

请考虑以下方法:

private (string email, string password) GetCredentials()
    {

        string head = Request.Headers["Authorization"];
        if (head == null || !head.StartsWith("Basic ")) throw new TokenValidationException("Token absent.");

        AuthenticationHeaderValue authHeader = AuthenticationHeaderValue.Parse(Request.Headers["Authorization"]);

        if (!authHeader.Scheme.Equals("Basic")) throw new AuthenticationException();

        var bytes = Convert.FromBase64String(authHeader.Parameter);
        var header = System.Text.Encoding.UTF8.GetString(bytes);

        var parts = header.Split(new[] { ':' }, 2);
        return (parts[0].ToLowerInvariant(), parts[1]);
    }

为什么我们需要先获取字节,然后将其解码为UTF8字符串?

1 个答案:

答案 0 :(得分:1)

因为您可以将任何BLOB 存储为base-64,所以它不必是字符串。它可能是protobuf有效载荷,图像,文件附件等。实际上,通常,当您使用base-64时,因为您要在文本协议中存储二进制有效载荷;如果您只想存储string,则只需... 直接嵌入字符串。因此:实际上,几乎从不是字符串有效负载,因此为什么没有DecodeBase64ThenDecodeThatAsString方法。