我目前正在为某些http请求编写错误处理。 例如,如果令牌已过期,我会收到以下字符串作为响应。Headers.WwwAuthenticate:
"error="invalid_token", error_description="The token is expired""
该字符串是AuthenticationHeaderValue对象的Paremeter属性。 我尝试用JObject.Parse((和JsonConvert.DeserializeObject((反序列化字符串,但它不起作用。我想这是因为 JSON无效,因为属性名称没有引号,并且它使用">=">而不是":">。
有没有简单的方法来解析该字符串?
今天遇到了完全相同的问题。我的解决方案是检查参数字符串是否用大括号括起来,如果没有将它们放在周围,然后对其进行反序列化。 所以它会是这样的:
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);
我还必须将"="替换为":",所以它将是:
JsonConvert.DeserializeObject<MyErrorObject>( "{ " + parameter.Replace("=", ":") + " }")