Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将GetEntity().GetContent()从Java转换为C#_Java_C# - Fatal编程技术网

将GetEntity().GetContent()从Java转换为C#

将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

在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 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();