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



我目前正在为某些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("=", ":") + " }")

最新更新