簡體   English   中英

在ServiceStack JsonServiceClient上設置Accept標頭

[英]Set Accept header on ServiceStack JsonServiceClient

我正在使用ServiceStack.JsonServiceClient嘗試使用接受標頭的自定義值發出URL請求,但是無法找到進行調用的方法。

該服務調用是通過GitHub API檢索存儲庫的主題。 當前,這是預覽功能,需要其他信息作為自定義媒體類型在accept標頭上發送。 https://developer.github.com/v3/repos

我正在使用Service Stack並對API端點進行C#.NET調用,而我正努力尋找適當的方法來更新請求上的accept標頭。 我已經嘗試了兩個階段。

  1. 創建帶有標題的HttpWebRequest並將其傳遞給客戶端

      Uri uri = new Uri(requestUrl, UriKind.Absolute); HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(uri); webRequest.Accept = "application/vnd.github.mercy-preview+json"; HttpWebResponse webResponse = client.Get<HttpWebResponse>(webRequest); 

    requestUrl是形式為https://api.github.com/repos/{owner}/{repo}?access_token={token}的字符串。 它成功創建了Uri和HttpWebRequest對象,但隨后在client.Get上引發了異常,並聲明Invalid URI: The format of the URI could not be determined.

    使用字符串URL調用API: HttpWebResponse webResponse = client.Get<HttpWebResponse>(requestUrl); 成功而沒有問題(但未傳遞自定義標頭值)。

  2. 在客戶端本身上設置標頭。 client.AddHeaders會引發異常,因為Accept是受限制的標頭。 我一直找不到其他方法可以直接在客戶端上設置標頭(盡管這可能是最好的解決方案)。

謝謝,讓我知道我還有什么可以提供的。

您可以在發送請求之前使用RequestFilter修改HttpWebRequest ,例如:

var client = new JsonServiceClient(baseUrl) {
    RequestFilter = req => req.Accept = acceptHeader
};

注意:ServiceStack的C#/。NET服務客戶端僅應用於調用ServiceStack服務。 為了調用第三方API,您應該改用HTTP Utils ,例如:

var body = url.GetStringFromUrl(requestFilter: req => {
    req.Accept = acceptHeader;
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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