将GetEntity().GetContent()从Java转换为C#
在C#中使用restAPI时,我需要将以下代码从Java转换为C# 在java中:将GetEntity().GetContent()从Java转换为C#,java,c#,Java,C#,在C#中使用restAPI时,我需要将以下代码从Java转换为C# 在java中: HttpGet statusGet = new HttpGet(fileUrl); statusGet.setHeader("X-API-TOKEN", API_TOKEN); HttpResponse response = httpClient.execute(statusGet); // Extract exported file ZipInputStream zs = new Zi
HttpGet statusGet = new HttpGet(fileUrl);
statusGet.setHeader("X-API-TOKEN", API_TOKEN);
HttpResponse response = httpClient.execute(statusGet);
// Extract exported file
ZipInputStream zs = new ZipInputStream(response.getEntity().getContent());
在C#中,这就是我所拥有的:
var client1 = new RestClient(fileUrl);
var request1 = new RestRequest(Method.GET);
request1.AddHeader("X-API-TOKEN", "API_TOKEN");
request1.AddHeader("content-type", "application/json");
request1.AddParameter("application/json", "{\n\t\"format\" : \"csv\",\n\t\"surveyId\" : \"_surveyId\"\n}", ParameterType.RequestBody);
IRestResponse responsedata = client1.Execute(request1);
var download=client1.DownloadData(request1);
MemoryStream stream = new MemoryStream(download);
ZipInputStream zs = new ZipInputStream(stream);
using (ZipFile zip1 = ZipFile.Read(zs))
我不知道如何实现response.getEntity().getContent()。我相信它正在获取流(包含zip文件?)
更新:所以我从client1.DownloadData(request1)获取字节数组,看起来将其转换为流是不对的(有readtimeout异常)。它将无法从zipfile.read读取
非常感谢您的帮助您是否收到任何特定错误?看起来您正在使用实现此功能。您是否遵循了他们的示例并阅读了他们的文档 我个人没有使用过这个第三方解决方案,但他们的头版上立即出现了以下示例,正是您想要做的:
var client=new RestClient(“http://example.com");
//client.Authenticator=新的HttpBasicAuthenticator(用户名、密码);
var request=new RestRequest(“resource/{id}”,Method.POST);
request.AddParameter(“名称”、“值”);//基于方法添加到POST或URL查询字符串
request.AddUrlSegment(“id”,“123”);//替换请求中的匹配令牌。资源
//轻松添加HTTP头
请求。添加标题(“标题”、“值”);
//添加要上载的文件(适用于兼容谓词)
request.AddFile(路径);
//执行请求
IRestResponse response=client.Execute(请求);
var content=response.content;//原始内容作为字符串
//或自动反序列化结果
//已嗅探返回内容类型,但可以通过RestClient.AddHandler()显式设置;
resresponse response2=client.Execute(请求);
var name=response2.Data.name;
//轻松异步支持
client.ExecuteAsync(请求、响应=>{
Console.WriteLine(response.Content);
});
//异步与反序列化
var asynchHandle=client.ExecuteAsync(请求、响应=>{
Console.WriteLine(response.Data.Name);
});
//按需中止请求
asynchHandle.Abort();
您可能希望访问
IRestResponse.Content
属性,或者使用RestClient.Execute(RestRequest request)
函数进行反序列化。是。你完全正确。我被告知它将返回一个zip文件。我假设iRestreponse.Content包含zip文件?但它现在是一根弦。你认为我能反序列化吗?谢谢gmileyNo您可能只想将内容作为字符串使用,并使用System.IO
命名空间中的using类/函数将其作为文件写入文件系统。只有在需要类时才反序列化到类。如果您正在接收文件内容,您通常会将其作为字符串
或可能是某种流
来接收。@shakedong93此答案有助于解决您的问题吗?很抱歉,响应延迟。这并不能解决问题。我尝试将响应作为rawbytes并转换为流。当它通过ZIL文件时,它将无法正确读取它。此外,该流还有readtimeout和writetimeout异常。请看更新后的帖子
var client = new RestClient("http://example.com");
// client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest("resource/{id}", Method.POST);
request.AddParameter("name", "value"); // adds to POST or URL querystring based on Method
request.AddUrlSegment("id", "123"); // replaces matching token in request.Resource
// easily add HTTP Headers
request.AddHeader("header", "value");
// add files to upload (works with compatible verbs)
request.AddFile(path);
// execute the request
IRestResponse response = client.Execute(request);
var content = response.Content; // raw content as string
// or automatically deserialize result
// return content type is sniffed but can be explicitly set via RestClient.AddHandler();
RestResponse<Person> response2 = client.Execute<Person>(request);
var name = response2.Data.Name;
// easy async support
client.ExecuteAsync(request, response => {
Console.WriteLine(response.Content);
});
// async with deserialization
var asyncHandle = client.ExecuteAsync<Person>(request, response => {
Console.WriteLine(response.Data.Name);
});
// abort the request on demand
asyncHandle.Abort();