请考虑以下方法:
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字符串?
答案 0 :(得分:1)
因为您可以将任何BLOB 存储为base-64,所以它不必是字符串。它可能是protobuf有效载荷,图像,文件附件等。实际上,通常,当您使用base-64时,因为您要在文本协议中存储二进制有效载荷;如果您只想存储string
,则只需... 直接嵌入字符串。因此:实际上,几乎从不是字符串有效负载,因此为什么没有DecodeBase64ThenDecodeThatAsString
方法。