[英]Set Accept header on ServiceStack JsonServiceClient
我正在使用ServiceStack.JsonServiceClient嘗試使用接受標頭的自定義值發出URL請求,但是無法找到進行調用的方法。
該服務調用是通過GitHub API檢索存儲庫的主題。 當前,這是預覽功能,需要其他信息作為自定義媒體類型在accept標頭上發送。 ( https://developer.github.com/v3/repos )
我正在使用Service Stack並對API端點進行C#.NET調用,而我正努力尋找適當的方法來更新請求上的accept標頭。 我已經嘗試了兩個階段。
創建帶有標題的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);
成功而沒有問題(但未傳遞自定義標頭值)。
在客戶端本身上設置標頭。 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.