簡體   English   中英

ServiceStack JsonServiceClient 響應頭

[英]ServiceStack JsonServiceClient Response Header

我是 ServiceStack 的新手,所以請原諒我的無知...

我怎樣才能讓JsonServiceClient提供我的DataContract響應對象並允許我僅通過一個請求獲取響應標頭?

我已經想出了如何像這樣返回一個填充的 DataContract Response 對象:

var field1 = "aaa";
var field2 = "bbb";

var client = new JsonServiceClient("https://api.server.com/api");
Response1 response1 = client.Post(new Request1() { Field1= field1, Field2= field2});

我還想出了如何從這樣的HttpWebResponse重載中獲取響應標頭項(見下文),這需要稍微修改注釋掉請求數據協定接口,如下所示: class Request1 //: IReturn<Response1>

var field1 = "aaa";
var field2 = "bbb";

var client = new JsonServiceClient("https://api.server.com/api");
HttpWebResponse response1 = client.Post(new Request1() { Field1= field1, Field2= field2});
var value = response1.Headers.GetValues("Item")[0];

但同樣,我怎么能同時做到這兩點呢?

我確實想出了如何使用.PostJsonToUrl()擴展方法來做到這一點,但我的問題是如何使用JsonServiceClient做到這JsonServiceClient 如果有人好奇這里是我如何使用.PostJsonToUrl()擴展方法.PostJsonToUrl()

var url = "https://api.server.com/api/method";
string value = null;
Response1 response1 = url.PostJsonToUrl(new Request1() { Field1= field1, Field2= field2},
    null, httpResponse =>
    {
        value = httpResponse.Headers.GetValues("Item")[0];
    }).FromJson<Request1>();

這是我的 DataContract 類

[Route("/method")]
[DataContract]
class Request1 : IReturn<Response1>
{
    [DataMember(Name = "field1")]
    public string Field1 { get; set; }
    [DataMember(Name = "field2")]
    public string Field2 { get; set; }
}

[DataContract]
class Response1
{
    [DataMember(Name = "field1")]
    public long Field1 { get; set; }

    [DataMember(Name = "field2")]
    public string Field2 { get; set; }

    [DataMember(Name = "field3")]
    public string Field3 { get; set; }
}

所有ServiceStack 的 .NET 客戶端都包含ResponseFilter和靜態GlobalResponseFilter屬性,您可以使用它們在反序列化響應之前檢查 HTTP 響應,例如:

string myHeader = null;
var client = new JsonServiceClient(baseUrl) {
    ResponseFilter = res => myHeader = res.Headers["X-MyHeader"],
};

var response = client.Post(request);

其中response將包含反序列化的 Response 正文,而myHeader將填充X-MyHeader HTTP Header 的值。

暫無
暫無

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

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