每当我使用Jwt令牌授权发布请求时,如下所示:
_```js client.BaseAddress = new Uri(_settings.Uri); _client.DefaultRequestHeaders.Accept.Clear(); _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(type)); _client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
我收到此错误:
```js
承载未认证。失败消息:没有可用于令牌的SecurityTokenValidator:“ eyJ ...”
仔细查看邮递员中的请求后,我发现问题是在标头上的令牌中添加了“”:
邮差
这就是为什么我这样添加令牌的原因:
_client.DefaultRequestHeaders.Add("Authorization", $"Bearer {token.Replace("\"", "")}");
但是对我来说似乎“肮脏”。有没有更好的办法?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在C#中使用Jwt令牌进行HTTP请求时,确保令牌格式正确非常重要。你遇到的问题是因为JWT令牌被不必要的双引号包围了。你的解决方法是手动移除这些双引号,这确实是一种临时解决方案,但如你所说,这不是最优雅的方式。
一个更干净且推荐的做法是在存储或传递JWT令牌时就避免引入额外的双引号。检查你的token获取逻辑,确保在整个处理流程中没有意外地给token添加了引号。例如,如果你是从配置文件、数据库或者API响应中读取这个token,请确认该过程没有错误地将原始无引号的token加上了双引号。
如果无法直接从源头解决问题,可以考虑创建一个辅助方法来清理令牌,使得调用处更加简洁和明确:
private string CleanToken(string token)
{
return token.Replace("\"", "");
}
// 使用时:
_client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", CleanToken(token));
这样,虽然仍然需要处理字符串,但通过封装到一个方法中,代码的可读性和维护性得到了提升。同时,这个方法也清晰地表达了你的意图——确保令牌格式正确。
另外,直接设置Authorization
属性而不是使用Add
方法也是推荐的做法,因为Authorization
是一个专用的HTTP头,通常只设置一次。