我目前正在为某些http请求编写错误处理。例如,如果令牌已过期,我将在response.Headers.WwwAuthenticate:
中收到以下字符串"error=\"invalid_token\", error_description=\"The token is expired\""
string是AuthenticationHeaderValue对象的Paremeter属性。我用JObject.Parse()和JsonConvert.DeserializeObject()尝试了反序列化字符串,但是它不起作用。我猜这是因为JSON是invalid,因为属性名称是unquoted,并且它使用“ =”而不是“:”。
是否有简单的方法来解析该字符串?
今天遇到了完全相同的问题。我的解决方案是检查参数字符串是否用花括号括起来,如果不放在括号中,然后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);