在 ServiceStack JsonServiceClient 上设置接受 header
Set Accept header on ServiceStack JsonServiceClient
我正在使用 ServiceStack.JsonServiceClient 尝试发出一个 URL 请求,其中包含自定义值的 Accept header,但我无法找到发出调用的方法。
服务调用是通过 GitHub API 检索存储库的主题。目前这是一项预览功能,需要在接受 header 作为自定义媒体类型时发送其他信息。 (https://developer.github.com/v3/repos)
我正在使用 Service Stack 并对 API 端点进行 C# .NET 调用,我正在努力寻找适当的方法来更新对请求的接受 header。我试过两种策略。
使用 header 创建一个 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 objects,但随后在 client.Get
上抛出异常,声称 Invalid URI: The format of the URI could not be determined.
使用字符串 URL 调用 API:HttpWebResponse webResponse = client.Get<HttpWebResponse>(requestUrl);
成功,没有问题(但未传递自定义 header 值)。
在客户端本身设置 header。 client.AddHeaders
抛出异常,因为 Accept
是受限制的 header。我一直无法找到直接在客户端上设置 header 的任何其他方法(尽管这可能是最好的解决方案)。
谢谢,如果还有什么我可以提供的,请告诉我。
您可以在发送请求之前使用RequestFilter
修改HttpWebRequest
,例如:
var client = new JsonServiceClient(baseUrl) {
RequestFilter = req => req.Accept = acceptHeader
};
注:ServiceStack的C#/.NET Service Clients should only be used for calling ServiceStack Services. For calling 3rd Party APIs you should instead use HTTP Utils,例如:
var body = url.GetStringFromUrl(requestFilter: req => {
req.Accept = acceptHeader;
});
我正在使用 ServiceStack.JsonServiceClient 尝试发出一个 URL 请求,其中包含自定义值的 Accept header,但我无法找到发出调用的方法。
服务调用是通过 GitHub API 检索存储库的主题。目前这是一项预览功能,需要在接受 header 作为自定义媒体类型时发送其他信息。 (https://developer.github.com/v3/repos)
我正在使用 Service Stack 并对 API 端点进行 C# .NET 调用,我正在努力寻找适当的方法来更新对请求的接受 header。我试过两种策略。
使用 header 创建一个 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 objects,但随后在client.Get
上抛出异常,声称Invalid URI: The format of the URI could not be determined.
使用字符串 URL 调用 API:
HttpWebResponse webResponse = client.Get<HttpWebResponse>(requestUrl);
成功,没有问题(但未传递自定义 header 值)。在客户端本身设置 header。
client.AddHeaders
抛出异常,因为Accept
是受限制的 header。我一直无法找到直接在客户端上设置 header 的任何其他方法(尽管这可能是最好的解决方案)。
谢谢,如果还有什么我可以提供的,请告诉我。
您可以在发送请求之前使用RequestFilter
修改HttpWebRequest
,例如:
var client = new JsonServiceClient(baseUrl) {
RequestFilter = req => req.Accept = acceptHeader
};
注:ServiceStack的C#/.NET Service Clients should only be used for calling ServiceStack Services. For calling 3rd Party APIs you should instead use HTTP Utils,例如:
var body = url.GetStringFromUrl(requestFilter: req => {
req.Accept = acceptHeader;
});