Ø  前言

目前 ASP.NET Web API 的应用非常广泛,主要承载着服务端与客户端的数据传输与处理,如果需要使用 Web API 实现文件下载,该 实现呢,其实也是比较简单,以下示例用于下载安卓的 .apk 文件。

1.   C# 代码

/// <summary>

/// 获取最新 Apk 文件。

/// </summary>

/// <param name="request"></param>

/// <returns></returns>

[Route("getLatest"), HttpGet]

[AllowAnonymous]

public HttpResponseMessage GetLatest(HttpRequestMessage request)

{

var appVersionInfo = appManageService.GetLatest();

string vp = appVersionInfo.VersionPath;     //http://xxx.xxx.xx.xx:81/xxxxx/xxx/3.0.6_20171017181838121.apk

int lastIndex = vp.LastIndexOf("/");

string fileName = "Yoca_{0}".Fmt(vp.Substring(lastIndex + 1, vp.Length - (lastIndex + 1)));

byte[] bytes = null;

WebRequest webRequest = (WebRequest)HttpWebRequest.Create(vp);

using (WebResponse webResponse = webRequest.GetResponse())

{

using (var stream = webResponse.GetResponseStream())

{

bytes = new byte[webResponse.ContentLength];

stream.Read(bytes, 0, bytes.Length);

}

}

var response = request.CreateResponse();

response.Content = new ByteArrayContent(bytes ?? new byte[0]);

response.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(

"application/vnd.android.package-archive");

response.Content.Headers.ContentDisposition =

new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment")

{

FileName = fileName

};

return response;

}

2.   说明

1)   以上代码:首先,从数据库中读取最新的 .apk 文件路径(网络URI);然后,使用 WebRequest 等对象获取该文件的响应流;最后,将获取的 byte 数组转为 ByteArrayContent 对象,以响应 HTTP 消息。

2)   注意:需要根据不同的文件类型,设置响应的 ContentType 值,可参考:http://www.runoob.com/http/http-content-type.html

3)   其实,很多文件下载都是使用这种方式,比如导出 excel 或者 csv 文件等。

ASP.NET Web API 2 之文件下载的更多相关文章

  1. 在一个空ASP.NET Web项目上创建一个ASP.NET Web API 2.0应用

    由于ASP.NET Web API具有与ASP.NET MVC类似的编程方式,再加上目前市面上专门介绍ASP.NET Web API 的书籍少之又少(我们看到的相关内容往往是某本介绍ASP.NET M ...

  2. ASP.NET Web API Model-ActionBinding

    ASP.NET Web API Model-ActionBinding 前言 前面的几个篇幅把Model部分的知识点划分成一个个的模块来讲解,而在控制器执行过程中分为好多个过程,对于控制器执行过程(一 ...

  3. ASP.NET Web API Model-ParameterBinding

    ASP.NET Web API Model-ParameterBinding 前言 通过上个篇幅的学习了解Model绑定的基础知识,然而在ASP.NET Web API中Model绑定功能模块并不是被 ...

  4. ASP.NET Web API Model-ModelBinder

    ASP.NET Web API Model-ModelBinder 前言 本篇中会为大家介绍在ASP.NET Web API中ModelBinder的绑定原理以及涉及到的一些对象模型,还有简单的Mod ...

  5. ASP.NET Web API Model-ValueProvider

    ASP.NET Web API Model-ValueProvider 前言 前面一篇讲解了Model元数据,Model元数据是在Model绑定中很重要的一部分,只是Model绑定中涉及的知识点比较多 ...

  6. ASP.NET Web API Model-ModelMetadata

    ASP.NET Web API Model-ModelMetadata 前言 前面的几个篇幅主要围绕控制器的执行过程,奈何执行过程中包含的知识点太庞大了,只能一部分一部分的去讲解,在上两篇中我们看到在 ...

  7. ASP.NET Web API 过滤器创建、执行过程(二)

    ASP.NET Web API 过滤器创建.执行过程(二) 前言 前面一篇中讲解了过滤器执行之前的创建,通过实现IFilterProvider注册到当前的HttpConfiguration里的服务容器 ...

  8. ASP.NET Web API 过滤器创建、执行过程(一)

    ASP.NET Web API 过滤器创建.执行过程(一) 前言 在上一篇中我们讲到控制器的执行过程系列,这个系列要搁置一段时间了,因为在控制器执行的过程中包含的信息都是要单独的用一个系列来描述的,就 ...

  9. ASP.NET Web API 控制器执行过程(一)

    ASP.NET Web API 控制器执行过程(一) 前言 前面两篇讲解了控制器的创建过程,只是从框架源码的角度去简单的了解,在控制器创建过后所执行的过程也是尤为重要的,本篇就来简单的说明一下控制器在 ...

随机推荐

  1. 使用matplotlib.pylab绘制分段函数

    1.安装matplotlib pip3 install matplotlib sudo apt install python3-tk 2.分段函数 from pylab import * x = li ...

  2. bzoj1066 蜥蜴 (dinic)

    最大流板子题. 对于每根柱子,建两个点ai,bi,建边(ai,bi,柱子高度) 对于距离不超过d的两根柱子i,j,建边(bi,aj,inf) 对于起始位置在i的每个蜥蜴,建边(S,ai,1) 对于能跳 ...

  3. 【算法】php实现斐波那契数列

    斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21.这个数列从第3项开始,每一项都等于前两项之和. 根据这个定义,斐波那契数列的递推公式是:f(n)=f(n-1)+f(n ...

  4. C#两个实体之间相同属性的映射

    public static R Mapping<R, T>(T model) { R result = Activator.CreateInstance<R>(); forea ...

  5. django2用模板代码图标字体丢失报404 cJZKeOuBrn4kERxqtaUH3T8E0i7KZn-EPnyo3HZu7kw.woff

    以前开发网站,不是用php就是用c#或java写后端,跟后端繁重麻烦的代码相比,前端的html+css+JavaScript简直就简单的不算技术,相比之下,工作量也不大. 但如果用django框架,使 ...

  6. Oracle的DQL

    基本查询: 链接语句: sqlplus scott/tiger@192.168.56.101:1521/orcl SQL> --清屏 SQL> host cls (host clear) ...

  7. SCU-4437 Carries

    https://blog.csdn.net/catglory/article/details/46539283 https://blog.csdn.net/u012127882/article/det ...

  8. Go-day06

    今日内容概要: 1.interface接口 2.反射 一.接口 接口定义 1.Interface类型可以定义一组方法,当时不需要实现,并且interface不能包含任何变量 2.接口定义 type e ...

  9. hadoop mapreduce 基础实例一记词

    mapreduce实现一个简单的单词计数的功能. 一,准备工作:eclipse 安装hadoop 插件: 下载相关版本的hadoop-eclipse-plugin-2.2.0.jar到eclipse/ ...

  10. 全角的空格(A1A1)惹的祸!

    #先上干货 “A1A1”是指全角的空格(GBK码): #验证 由上图可以看出半角的空格的HEX为"20": 由上图可以看出,在ANSI格式编码的文件中输入的全角的空格,转换为HEX ...