反序列化字符串(AuthenticationHeaderValue.Parameter)

问题描述 投票:0回答:1

我目前正在为某些http请求编写错误处理。例如,如果令牌已过期,我将在response.Headers.WwwAuthenticate

中收到以下字符串
"error=\"invalid_token\", error_description=\"The token is expired\""

stringAuthenticationHeaderValue对象的Paremeter属性。我用JObject.Parse()JsonConvert.DeserializeObject()尝试了反序列化字符串,但是它不起作用。我猜这是因为JSON是invalid,因为属性名称是unquoted,并且它使用“ =”而不是“:”

是否有简单的方法来解析该字符串?

c# deserialization httpresponse
1个回答
0
投票

今天遇到了完全相同的问题。我的解决方案是检查参数字符串是否用花括号括起来,如果不放在括号中,然后then反序列化。所以会是这样:

var header = response.Headers.WwwAuthenticate.FirstOrDefault();

if (header == null)
    return false;

if (header.Scheme != JwtBearerScheme)
    throw new Exception($"Fatal Error: Authentication scheme is { header.Scheme } instead of { JwtBearerScheme }.");

string parameter = header.Parameter;

if (!parameter.StartsWith("{") || !parameter.EndsWith("}"))
    parameter = "{ " + parameter + " }";

var error = JsonConvert.DeserializeObject<MyErrorObject>(parameter);
© www.soinside.com 2019 - 2024. All rights reserved.