所有ServiceStack 的 C# 服务客户端都有一个全局和本地请求过滤器,允许您初始化请求以及全局和本地响应过滤器,允许对返回的 HttpWebResponse 进行细粒度访问。
使用全局请求过滤器初始化所有 ServiceClients 的 WebRequest:
ServiceClientBase.HttpWebRequestFilter = httpReq => ConfigureWebClient(httpReq);
使用本地请求过滤器:
var client = new JsonServiceClient(baseUrl) {
LocalHttpWebRequestFilter = httpReq => ConfigureWebClient(httpReq)
};
尽管如果您只想要二进制响应,所有服务客户端都允许您指定 a string
、byte[]
或作为您的通用响应类型Stream
,HttpWebResponse
它会返回所请求的内容。有关这些示例的更多示例,请参见Service Client wiki 页面。
以下是检索二进制响应的方法:
byte[] responseBytes = client.Get<byte[]>("/poco/World");
var dto = responseBytes.FromUtf8Bytes().FromJson<PocoResponse>();
或使用流:
using (Stream responseStream = client.Get<Stream>("/poco/World")) {
var dto = responseStream.ReadFully().FromUtf8Bytes().FromJson<PocoResponse>();
}
或者来自底层的 HttpWebResponse:
HttpWebResponse webResponse = client.Get<HttpWebResponse>("/poco/World");
using (var stream = webResponse.GetResponseStream())
using (var sr = new StreamReader(stream)) {
var dto = sr.ReadToEnd().FromJson<PocoResponse>();
}
您可以更改开源软件,而不必解决它
ServiceStack 是开源软件,无需寻找黑客或尝试解决无法访问或不可用的问题,发出拉取请求以更改您想要的内容,如果它是对常见用例的有效请求,它将很可能被接受。否则,请随意获取源代码的一个分支并根据需要对其进行自定义。