您的位置:首页 > 其它

Web API 数据流使用

2015-12-10 15:31 225 查看

ASP.NET Web API 应用教程(一) ——数据流使用



相信已经有很多文章来介绍ASP.Net Web API 技术,本系列文章主要介绍如何使用数据流,HTTPS,以及可扩展的Web API 方面的技术,系列文章主要有三篇内容。

主要内容如下:

I 数据流

II 使用HTTPS

III 可扩展的Web API 文档

项目环境要求

VS 2012(SP4)及以上,

.Net 框架4.5.1

Nuget包,可在packages.config 文件中查寻

本文涉及的知识点

ActionFilter

AuthorizationFilter

DelegateHandler

Different Web API routing 属性

MediaTypeFormatter

OWIN

Self Hosting

Web API 文档及可扩展功能

.Net 框架

Async/Await

.NET reflection

Serialization

ASP.NET Web API/MVC Error handling

IIS ,HTTPS 及Certificate

设计准则及技术

前言



自从ASP.NET MVC 4之后.Net 框架开始支持ASP.NET Web API ,ASP.NET Web API 基于HTTP 协议建立的,是构建 RESTful 服务和处理数据的理想平台,旨在使用HTTP 技术实现对多平台的支持。

ASP.NET Web API 以request-response 的消息转换模式为主,客户端向服务器发送请求,服务器端响应客户端请求。响应可同步或异步。

个人认为使用Web API创建应用需要注意的三个关键点:

采用服务及方法满足的目标

每个方法的输入,如请求

每个方法的输出,如响应

通常情况下,Asp.Net Web API 定义method语法与HTTP方法一一对应的,如自定义方法名
GetPysicians(),则与HTTP中Get 方法匹配。下图是常用匹配表。




但是此方法在很多情况下,并不实用,假如你想在单个API controller 类中定义多个Get 或Post 方法,在这种情况下,需要定义包含action 的路径,将Action 作为URI 的一部分。以下是配置代码:

[code]

[/code]
但是此方法不足以应对所有情况,如果想实现从中央仓库删除文件,并且想调用同一个方法来获取文件,这种情况下,Web API 框架需要伪装Get 及Delete对应的HTTP 方法属性。如图所示:

RemoveFile 方法可被Delete(
HttpDelete
) 或 Get([code]HttpGet
)方法同时调用,从某种程度来说,HTTP 方法使开发人员命名 API“方法”变得简单而标准。[/code]
Web API框架也提供了一些其他功能来处理路径方面的问题,与MVC 的路径处理方法相似。因此可定义不同类型的Action方法。


数据流

网络App 最常见的执行操作就是获取数据流。ASP.NET Web API 能够处理客户端与服务器端传输的重量级的数据流,数据流可来源于目录文件,也可是数据库中的二进制文件。本文主要介绍两种方法“Download”和“Upload”实现数据流相关的功能,Download是从服务器下载数据操作,而Upload则是上传数据到服务器。


相关项目

WebAPIDataStreaming
WebAPIClient
POCOLibrary
在对代码解释之前,首先来了解如何配置IIS(7.5)和Web API 服务Web.Config 文件。
1. 保证Downloads/Uploads 涉及的文件具有读写权限。
2. 保证有足够容量的内容或因公安空间处理大文件。
3. 如果文件较大


a. 配置Web.Config 文件时,保证 
maxRequestLength 时响应时间 executionTimeout 合理。具体的值主要依赖于数据大小,允许一次性上传的最大数据为2 GB




b. 保证 [code]maxAllowedContentLength 在
requestFiltering部分配置下正确设置,默认值为30MB,最大值4GB





一旦完成预先配置,那么创建数据流服务就非常简单了,首先 需要定义文件流“[code]ApiController”,如下:

[code]

[/code]
Download 服务方法首先需要确认请求的文件是否存在,如果未找到,则返回错误提示“file is not found”,如果找到此文件,内容则转换为字节附加到响应对象,为“application/octet-stream” MIMI 内容类型。


[code]

[/code]
Upload服务方法则会在
multipart/form-data MIMI 内容类型执行,首先会检测HTTP 请求的内容类型是否是多主体,如果是,则对比内容长度是否超过最大尺寸,如果没有超过,则开始上传内容,当操作完成之后,则提示相应的信息。


代码片段如下:

[code]
[code]

[/code]
调用download 及 upload 文件方法是控制台应用,App 假定文件流服务通过HttpClient和相关类。基本下载文件代码,创建下载HTTP 请求对象。

[code]

[/code]

注意上述代码中HttpClient 对象发送请求,并等待响应发送Header内容(HttpCompletionOption.ResponseHeadersRead )。而不是发送全部的响应内容文件。一旦Response header 被读,则执行验证,一旦验证成功,则执行下载方法。

以下代码调用upload 文件流,与下载方法类似,创建多主体表单数据,并发送给服务器端。

[code]

[/code]

数据流项目由可扩展类和方法组成,本文就不再详述。下篇文章中将介绍“使用HTTPS 开发项目”

下载源代码

原文链接:http://www.codeproject.com/Articles/838274/Web-API-Thoughts-of-Data-Streaming#Hist
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: