Установить заголовок Accept для ServiceStack JsonServiceClient - PullRequest
0 голосов
/ 11 мая 2018

Я использую ServiceStack.JsonServiceClient, чтобы попытаться сделать запрос URL с пользовательским значением для заголовка Accept, но не могу найти способ сделать вызов.

Сервисный вызов должен получитьтемы для репозитория через GitHub API.В настоящее время это функция предварительного просмотра, которая требует отправки дополнительной информации в заголовке подтверждения в качестве пользовательского типа мультимедиа.(https://developer.github.com/v3/repos)

Я использую Service Stack и выполняю вызов C # .NET к конечной точке API, и я пытаюсь найти подходящий способ обновить заголовок accept в запросе.попробовал два strageies.

  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.

    Вызов API со строковым URL: HttpWebResponse webResponse = client.Get<HttpWebResponse>(requestUrl); успешно выполняется без проблем (но пользовательскийзначение заголовка не передается).

  2. Установить заголовок на самом клиенте. client.AddHeaders выдает исключение, поскольку Accept является ограниченным заголовком. Мне не удалось найти другиеспособ установить заголовок непосредственно на клиенте (хотя это, вероятно, было бы самым хорошим решением).

Спасибо, и дайте мне знать, если есть что-нибудь еще, что я могу предоставить.

1 Ответ

0 голосов
/ 11 мая 2018

Вы можете использовать RequestFilter для изменения HttpWebRequest перед отправкой запросов, например:

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

Примечание: ServiceStack's C # /. NET Service Clients должно быть толькоиспользуется для вызова ServiceStack Services.Для вызова сторонних API вы должны вместо этого использовать HTTP Utils , например:

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