![](/img/trans.png)
[英]How to add a static authorization header with refit in xamarin.forms?
[英]Xamarin forms not sending Authorization header
我知道這個問題似乎是重復的,但是在嘗試再次提出此問題之前,我已經嘗試了所見過的所有解決方案。
我正在嘗試使用REST API,該API是我使用Django Rest Framework使用Xamarin Forms中的C#HttpClient編寫的。 該請求正在發送,但不包括所需的帶令牌 授權方案。
這是我嘗試過的事情:
public async Task<IssueListModelView> FetchIssues(string token, string type)
{
client.BaseAddress = new Uri(XTMonitorContants.SERVICE_BASE_URL);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, new Uri(XTMonitorContants.SERVICE_ISSUES_URL + type.ToLower()));
request.Headers.Add("Authorization", "Token " + token);
//client.
//client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Token", token);
client.DefaultRequestHeaders.Add("Authorization", "Token " + token);
var response = client.SendAsync(request);
var jsonString = response.ContinueWith(t => { return t.Result; }).Result.Content.ReadAsStringAsync().Result;
IssueListModelView resp = new IssueListModelView();
if (jsonString != "")
{
try
{
resp = JsonConvert.DeserializeObject<IssueListModelView>(jsonString);
}
catch (Exception)
{
resp.error = "Internal Server Error";
}
}
return resp;
}
我也嘗試不使用HttpRequestMessage直接發送請求,但是也給了我相同的服務器響應
“未提供身份驗證憑據。”
郵遞員的要求
GET / api / issues /所有HTTP / 1.1
主持人:example.com
授權:令牌ffba1c43ac346945b788768e2a428d5e5d3c1fc9
緩存控制:無緩存
郵遞員令牌:0c1eb96d-d9d6-a9e7-0cfa-0444fdc0248e
HttpClient發出的請求
{Method: GET, RequestUri: 'https://example.com/api/issues/all', Version: 1.1, Content: <null>, Headers: { Authorization: Token ffba1c43ac346945b788768e2a428d5e5d3c1fc9 }}
請注意,我已經使用Postman正確地測試了API,還設置了Swagger,在這兩者上都可以正常工作。
如果有人可以在這里幫助我會很高興,因為我認為可能我錯過了一些東西
盡量不要混合使用阻塞( .Result
)和異步代碼。 使方法一直保持異步。
另外,在設置請求授權標頭時,請嘗試在標頭上使用Authorization
屬性
request.Headers.Authorization = new AuthenticationHeaderValue(tokenType, token);
重構方法
public async Task<IssueListModelView> FetchIssues(string token, string type) {
client.BaseAddress = new Uri(XTMonitorContants.SERVICE_BASE_URL);
var uri = new Uri(XTMonitorContants.SERVICE_ISSUES_URL + type.ToLower());
var request = new HttpRequestMessage(HttpMethod.Get, uri);
request.Headers.Authorization = new AuthenticationHeaderValue("Token", token);
var response = await client.SendAsync(request);
var jsonString = await response.Content.ReadAsStringAsync();
IssueListModelView resp = new IssueListModelView();
if (jsonString != "") {
try {
resp = JsonConvert.DeserializeObject<IssueListModelView>(jsonString);
} catch (Exception) {
resp.error = "Internal Server Error";
}
}
return resp;
}
好的,經過全面檢查,我發現我的網址中缺少尾部斜杠,服務器將我的請求從example.com/api/issues/all重定向到example.com/api/issues/all/,因此重定向時不保留標題。
最后,對於可能遇到相同問題或嘗試使用API的其他人,您可能想簽出Flurl ,我能夠完成整個請求,並用單行將json直接反序列化為C#對象,很酷對?
感謝您的回復@Nkosi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.