如何在 ASP.Net MVC 应用程序中使用、读取和解压缩第三方 API 响应

Posted

技术标签:

【中文标题】如何在 ASP.Net MVC 应用程序中使用、读取和解压缩第三方 API 响应【英文标题】:How to consume, read and unzip a third party API response in ASP.Net MVC application 【发布时间】:2019-01-31 22:57:10 【问题描述】:

我正在尝试使用 URL 如下所示的第三方 API:

https://api.crowdin.com/api/project/PROJECT_NAME/download/all.zip?key=MY_KEY

此 api 返回一个 zip 文件作为“all.zip”作为响应。

当我进入浏览器并提出这个请求时,我会下载一个 all.zip 文件。现在我想编写 C# 代码来得到这个结果。以下是我的尝试:

public async Task<ActionResult> Index()
        
            var client = new HttpClient();
            client.BaseAddress = new Uri("https://api.crowdin.com/");
            HttpResponseMessage response = await client.GetAsync("api/project/MY_PROJECT/download/all.zip?key=MY_KEY");
           // WHAT TO WRITE HERE
            return View();
        

问题1:我收到了成功的回复,内容类型是application/zip,但是现在我不知道如何阅读这个回复。

问题 2:我希望将响应解压缩并保存到一个文件夹中。

P.S:响应 .zip 文件是 .resx 文件的集合。

【问题讨论】:

【参考方案1】:

这主要来自记忆,所以我没有测试过代码。它应该让你非常接近你正在寻找的东西:

将响应保存到文件:

var response = httpClient.GetAsync("api/project/MY_PROJECT/download/all.zip?key=MY_KEY");
using (var stream = await response.Content.ReadAsStreamAsync())
using (var fs = new FileStream(filename) 
    await stream.CopyToAsync(fs);

解压文件(你也可以在内存中解压)

System.IO.Compression.ZipFile.ExtractToDirectory(filename, extractPath);

【讨论】:

我需要用什么代替filename 文件名...您要保存文件的位置。 工作就像一个魅力。非常感谢!

以上是关于如何在 ASP.Net MVC 应用程序中使用、读取和解压缩第三方 API 响应的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web 应用程序系列- 在ASP.NET Core中使用Autofac替换自带DI进行批量依赖注入(MVC当中应用)

如何在 ASP.NET MVC 应用程序中管理和部署架构(使用 NHibernate)

使用命令行如何在 ASP.NET 中首先从 DB 搭建脚手架 - 而不是 ASP.NET Core MVC?

如何在 ASP.NET Core MVC 中使用依赖注入设计存储库模式?

如何在 asp.net mvc 应用程序中使用个性化 url

如何使用 mvc 6、asp.net 5 注册全局过滤器