c# - 如何在 xamarin.forms 中添加带有 refit 的静态授权标头?
问题描述
我正在尝试添加具有基本身份验证的静态授权标头,但是当我发出请求时,服务器响应是否定的。所以,我尝试以这种方式添加它:
[Headers("Authorization: Basic","Content-Type: application/x-www-form-urlencoded" )]
public interface IRouteApi
{
[Post("/getRoute?dtxIni={Ini}&dtxFin={Fin}")]
Task<HttpResponseMessage> getPathInfo(int Ini, int Fin);
}
然后我得到了一个静态配置类:
public static class Config
{
public static string ApiUrl = "http://www2.baseUrl.it/Base";
static string username = "aaa";
static string password = "bbb";
public static string authHeader =
Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
public static RefitSettings refitSettings = new RefitSettings()
{
AuthorizationHeaderValueGetter = () => Task.FromResult(authHeader)
};
}
RestService.For<T>(client,Config.refitSettings);
但它不起作用,请求未经授权。我也关注这个问题:改装和授权标头,但这并不能说服我,因为他/她在他/她的 api 定义中放置了一个动态标头。也许问题出在多个标题中?
解决方案
由于您的授权标头永远不会更改,因此您实际上不需要使用AuthorizationHeaderValueGetter
(旨在用于更动态的身份验证场景)。相反,只需使用DefaultRequestHeaders
您的字典HttpClient
:
var client = new HttpClient
{
BaseAddress = new Uri("https://example.com"),
DefaultRequestHeaders =
{
{"Authorization", $"Basic {authHeader}"}
}
};
var api = RestService.For<IYourApi>(client);
推荐阅读
- reactjs - 如何在 React 中将道具从 Child 传递给 Parent 以实现增量 onClick?
- javascript - 更改可编辑 div 中所选单词的颜色并撤消它
- jquery - 获取表格列角度的所有值
- sql-server - VS Code MSSQL 扩展:默认对齐列和标题?
- sql - oracle sql过滤器在同一查询中
- google-chrome-devtools - force state :focus 和 Focus 直接从下拉列表中有什么区别?
- python - 处理 groupBy 聚合中缺少的 DataFrame 列
- php - Laravel 8 控制器不存在,命名空间在路由中,问题仅存在于 apache 网络服务器上,但在本地工作
- c# - 原始值和当前值相同 - 更改跟踪不起作用
- c# - 我可以在 Visual Studio Code 中使用一个终端处理多个文件吗?