簡體   English   中英

Xamarin表單未發送授權標頭

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM