servicestack,Json,Rest,servicestack" /> servicestack,Json,Rest,servicestack" />

Json 在ServiceStack中查看Http响应内容

Json 在ServiceStack中查看Http响应内容,json,rest,servicestack,Json,Rest,servicestack,我正在使用ServiceStack为JSON RESTful服务创建一个C#客户端。我有以下返回我的DTO的代码: 搜索结果=restClient.Get(搜索) 这很好,但是为了有效地调试返回的搜索结果,我需要从底层HTTP响应对象输出文本内容。(我还不知道响应中的所有元素,以便将它们添加到DTO中) 是否有任何方法可以从结果对象获取底层HTTP响应,从而获取全文内容 提前谢谢。 @adamfowleruk我用来调试我的服务。它为您提供了各种很酷的HTTP调试工具 从ServiceStack的

我正在使用ServiceStack为JSON RESTful服务创建一个C#客户端。我有以下返回我的DTO的代码:

搜索结果=restClient.Get(搜索)

这很好,但是为了有效地调试返回的搜索结果,我需要从底层HTTP响应对象输出文本内容。(我还不知道响应中的所有元素,以便将它们添加到DTO中)

是否有任何方法可以从结果对象获取底层HTTP响应,从而获取全文内容

提前谢谢。 @adamfowleruk

我用来调试我的服务。它为您提供了各种很酷的HTTP调试工具


从ServiceStack的内置服务继承时您可以通过以下方式直接从响应类访问底层请求和响应:

public class MyService : Service 
{
    public object Get(Request request)
    {
        base.Request ...
        base.Response ...
    }
}
您将不会在服务或筛选器中看到响应输出,因为它直接写入响应流,并且是最新的

对于诊断HTTP,我建议使用Fiddler或WebInspector也可能有所帮助

使用ServiceStack服务 如果您正在使用,您可以简单地询问您想要什么,例如,您可以将返回的响应作为原始字符串访问:

string responseJson = client.Get<string>("/poco/World");
或使用本地筛选器:

var client = new JsonServiceClient(baseUrl) { 
    ResponseFilter = httpRes => { .. }
};
使用第三方服务 如果您正在使用第三方REST/HTTP API,则可以在以下位置使用
responseFilter:

List repos=”https://api.github.com/users/{0}/repos.Fmt(用户)
.GetJsonFromUrl(responseFilter:httpRes=>{
var剩余=httpRes.Headers[“X-Api-remaining”];
})
.FromJson();

多亏了上面的帮助,我找到了正确的答案。在此为其他人记录:-

  SearchResponse result = null; // my ServiceStack DTO

  HttpWebResponse webResponse = restClient.Get<HttpWebResponse>(
    completePath("/v1/search",qp)); // builds the URL with parameters

  using (var stream = webResponse.GetResponseStream())
  using (var sr = new StreamReader(stream)) {
    var text = sr.ReadToEnd();
    log.log ("response text: " + text); // *** PRINTING STRING VALUE HERE FOR DEBUG 
    result = text.FromJson<SearchResponse>();
  }

  // Now do something useful with the result DTO object

  log.log ("RESULT: " + result.ToString ());
  for (int i = 0; i < result.Results.Length; i++) {
    log.log ("Result " + i + ": " + result.Results[i].ToString());
  }
SearchResponse结果=null;//我的ServiceStack DTO
HttpWebResponse webResponse=restClient.Get(
完成路径(“/v1/search”,qp));//使用参数生成URL
使用(var stream=webResponse.GetResponseStream())
使用(var sr=新的StreamReader(stream)){
var text=sr.ReadToEnd();
log.log(“响应文本:+text);//***在此处打印字符串值以进行调试
结果=text.FromJson();
}
//现在对结果DTO对象执行一些有用的操作
log.log(“结果:+RESULT.ToString());
for(int i=0;i
我喜欢使用RestConsole。这是一个Chrome扩展,您可以轻松提交POST请求并查看响应。创建示例数据,然后进入ServiceStack代码并查看发生了什么也很方便。ServiceStack PluralSight课程提供了一个很好的演示,演示了如何将它们结合使用。

谢谢,但我不是在创建服务,而是在使用服务。当我从get()返回的都是DTO时,如何获取响应对象?get或Post对于调试非常有用。首先,我使用这些方法进行调用,然后根据得到的响应在DTO类上使用DataContract和DataMember属性。非常酷。谢谢你的帮助。设法找到了一个好方法。为client.Get加1(“/poco/World”);这帮助我克服了绕过客户端的反序列化程序并访问原始响应的问题,允许我检查头并传递正在下载的流的“长度”。现在我可以在客户端下载进度条了。耶
HttpWebResponse webResponse = client.Get<HttpWebResponse>("/poco/World");

webResponse.Headers["X-Response"] //World
using (webResponse)
using (var stream = webResponse.GetResponseStream())
using (var sr = new StreamReader(stream)) {
    string response = sr.ReadToEnd();
}
JsonServiceClient.HttpWebResponseFilter = httpRes => { .. };
var client = new JsonServiceClient(baseUrl) { 
    ResponseFilter = httpRes => { .. }
};
List<GithubRepo> repos = "https://api.github.com/users/{0}/repos".Fmt(user)
    .GetJsonFromUrl(responseFilter: httpRes => {
        var remaining = httpRes.Headers["X-Api-Remaining"];
    })
    .FromJson<List<GithubRepo>>();
  SearchResponse result = null; // my ServiceStack DTO

  HttpWebResponse webResponse = restClient.Get<HttpWebResponse>(
    completePath("/v1/search",qp)); // builds the URL with parameters

  using (var stream = webResponse.GetResponseStream())
  using (var sr = new StreamReader(stream)) {
    var text = sr.ReadToEnd();
    log.log ("response text: " + text); // *** PRINTING STRING VALUE HERE FOR DEBUG 
    result = text.FromJson<SearchResponse>();
  }

  // Now do something useful with the result DTO object

  log.log ("RESULT: " + result.ToString ());
  for (int i = 0; i < result.Results.Length; i++) {
    log.log ("Result " + i + ": " + result.Results[i].ToString());
  }