UWP开发-HTTP详解
HTTP作为一个基础功能,有必要介绍下在UWP下的使用方法。
一、Get请求:
一般我们用到的是GetAsync方法
public static async Task Gets(Uri uri)
{
var response = await httpClient.GetAsync(uri);
var str = await response.Content.ReadAsStringAsync();
var stream = await response.Content.ReadAsInputStreamAsync();
var buff = await response.Content.ReadAsBufferAsync(); str = await httpClient.GetStringAsync(uri);
stream = await httpClient.GetInputStreamAsync(uri);
buff = await httpClient.GetBufferAsync(uri);
}
上面方法中的前四行和后三行是等价的。
如果要读取更多的信息,则用GetAsync读取返回值的response。
二、Post请求:
一般来说,我们最常用的是发送一个json串返回也是json串,也就是application/json类型
async public static Task<string> PostStringAsync(string url, string data)
{
try
{
HttpClient hc = new HttpClient();
using (var content = new HttpStringContent(data))
{
var response = await hc.PostAsync(new Uri(url), content);
var resdata = await response.Content.ReadAsStringAsync();
return resdata;
}
}
catch
{
return null;
}
}
如果服务器要求的类型是表单类型,也就是x-www-form-urlencoded类型
public async static Task<string> PostFormDataAsync(string url, List<KeyValuePair<string, string>> data)
{
try
{
HttpClient hc = new HttpClient();
var content = new HttpFormUrlEncodedContent(data);
var response = await hc.PostAsync(new Uri(url), content);
var resdata = await response.Content.ReadAsStringAsync();
Debug.WriteLine(resdata);
return resdata;
}
catch
{
return null;
}
}
KeyValuePair的构造(注意这里只有string类型和数值类型,不能包含文件类型):
public List<KeyValuePair<string, string>> CreatFormData<T>(T data)
{
List<KeyValuePair<string, string>> array = new List<KeyValuePair<string, string>>();
var type = data.GetType();
var propertyInfos = type.GetRuntimeProperties();
foreach (var p in propertyInfos)
{
if (p.GetValue(data) != null)
{
array.Add(new KeyValuePair<string, string>(p.Name, p.GetValue(data).ToString()));
}
}
return array;
}
如果要传的数据包含文件肿么办?
第一种情况:只有文件 ,application/octet-stream
这种情况比较简单,构造一个HttpStreamContent就可以了:
async public static Task<string> PostSteamAsync(string url, StorageFile file)
{
try
{
HttpClient hc = new HttpClient();
using (var content = new HttpStreamContent(await file.OpenAsync(FileAccessMode.Read)))
{
var response = await hc.PostAsync(new Uri(url), content);
var resdata = await response.Content.ReadAsStringAsync();
return resdata;
}
}
catch
{
return null;
} }
第二种情况:既有文件也有数据和字符串。也就是multipart/form-data类型
/// <summary>
/// 构造表单数据
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
async private static Task<HttpMultipartFormDataContent> ConstructMuilFromDataAsync(List<FormData> data)
{
var resdata = new HttpMultipartFormDataContent(boundary);
foreach (var item in data)
{
if (item.File == null && !string.IsNullOrEmpty(item.Value))
{
var scontent = new HttpStringContent(item.Value);
scontent.Headers.ContentDisposition = new HttpContentDispositionHeaderValue("form-data");
resdata.Add(scontent, item.Name);
}
else if (item.File != null)
{
var stream = await item.File.OpenAsync(FileAccessMode.Read); var buffcontent = new HttpStreamContent(stream);
buffcontent.Headers.ContentDisposition = new HttpContentDispositionHeaderValue("form-data");
buffcontent.Headers.ContentType = HttpMediaTypeHeaderValue.Parse(item.ContentType);
resdata.Add(buffcontent, item.Name, item.FileName);
}
}
return resdata;
} /// <summary>
/// 发送复杂表单类型
/// </summary>
/// <param name="url"></param>
/// <param name="data"></param>
/// <returns></returns>
async public static Task<string> PostMuilFormDataAsync(string url, List<FormData> data)
{
try
{
HttpClient hc = new HttpClient();
var content = await ConstructMuilFromDataAsync(data);
var response = await hc.PostAsync(new Uri(url), content);
var resdata = await response.Content.ReadAsStringAsync();
Debug.WriteLine(resdata);
return resdata;
}
catch
{
return null;
}
}
///自定义FormData类
public class FormData
{
private string _name;
private string _value;
private string _type;
public string Name
{
get { return _name; }
set { _name = value; }
}
public string Value
{
get { return _value; }
set { _value = value; }
}
public string ContentType
{
get { return _type; }
set { _type = value; }
}
public StorageFile File { get; set; }
public string FileName { get; set; } }
关于这段的FormData是我自己构造的,如果你有更好的方法,请告诉我。其中ContenType:Image为”Image/jpeg“;MP3为”Audio/MP3“;MP4为”Video/MP4“关于其他的则可以自行在网络上查询。
好了,关于Http的介绍就到这里了,如果还有其他的问题,欢迎留言或者联系我
UWP开发-HTTP详解的更多相关文章
- 《Android NFC 开发实战详解 》简介+源码+样章+勘误ING
<Android NFC 开发实战详解>简介+源码+样章+勘误ING SkySeraph Mar. 14th 2014 Email:skyseraph00@163.com 更多精彩请直接 ...
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- Extjs MVC开发模式详解
Extjs MVC开发模式详解 在JS的开发过程中,大规模的JS脚本难以组织和维护,这一直是困扰前端开发人员的头等问题.Extjs为了解决这种问题,在Extjs 4.x版本中引入了MVC开发模式, ...
- Cocos2d-x 3.X手游开发实例详解
Cocos2d-x 3.X手游开发实例详解(最新最简Cocos2d-x手机游戏开发学习方法,以热门游戏2048.卡牌为例,完整再现手游的开发过程,实例丰富,代码完备,Cocos2d-x作者之一林顺和泰 ...
- 《Node.js开发实战详解》学习笔记
<Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...
- 免费的HTML5连载来了《HTML5网页开发实例详解》连载(二)
最近新浪.百度.腾讯.京东.大众点评.淘宝等流行的网站都加大了招聘HTML5的力度,HTML5开发人员成了抢手货,本次连载的是由大众点评前端工程师和一淘网前端工程师基情奉献的<HTML5网页开发 ...
- 免费的HTML5连载来了《HTML5网页开发实例详解》连载(六)媒体查询
响应式设计的另一个重要技术手段是媒体查询.如果只是简单的设计一个流式布局系统,那么可以保证每个网格按比例的放大和缩小,但有可能会使得在小屏幕下(如手机设备)网格太小而严重影响阅读,这样的设计称不上响应 ...
- 免费的HTML5连载来了《HTML5网页开发实例详解》连载(五)图解通过Fiddler加速开发
Fiddler是Windows底下最强大的请求代理调试工具,监控任何浏览器的HTTP/HTTPS流量,窜改客户端请求和服务器响应,解密HTTPS Web会话,图4.44为Fiddler原理示意图. 图 ...
- 《HTML5网页开发实例详解》连载(四)HTML5中的FileSystem接口
HTML 5除了提供用于获取文件信息的File对象外,还添加了FileSystem相关的应用接口.FileSystem对于不同的处理功能做了细致的分类,如用于文件读取和处理的FileReader和Fi ...
随机推荐
- 快乐的JS正则表达式(开篇)
我不喜欢一开始就去讨论某某有多强大,因为我觉得那样没意思,首先我们的知道它是干什么,对我们有啥用,再去讨论它的强大之处也不迟.那和往常一样我们先来看几个例子. var arr = [1,4,2,5,2 ...
- http协议客户端向服务器端请求时一般需要发送的内容
out.println("GET /shopping/index.html HTTP/1.1");//请求行 包括请求方式,文件路径, http协议版本(必写)请求头.... ou ...
- 《微信小程序七日谈》- 第四天:页面路径最多五层?导航可以这么玩
<微信小程序七日谈>系列文章: 第一天:人生若只如初见: 第二天:你可能要抛弃原来的响应式开发思维: 第三天:玩转Page组件的生命周期: 第四天:页面路径最多五层?导航可以这么玩 微信小 ...
- [阅读]个人阅读作业week7(200)
个人作业week7——前端开发感想总结 此次作业因本人(学号1200)长期不上博客所以密码遗忘,输错次数过多账号被锁,所以在SivilTaram同学的博客下挂我的作业,希望助教老师谅解~谢谢! 1. ...
- 2015 Multi-University Training Contest 1 - 10010 Y sequence
Y sequence Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5297 Mean: 有连续数列A={1,2,3,4,5,6, ...
- Winform开发框架主界面设计展示
做了好多年Winform的程序的开发,主窗口的界面设计一般都要求做的更好一些,可以根据不同的系统功能模块进行归类整合,能使客户迅速寻找到相关功能的同时,也能感觉到整体性的美观大方,因此主窗口的界面设计 ...
- HTML—one
1.我们做一个完整的网页,要做三个部分 前端部分:Html(是一种超文本标记语言,网页)+css(网页外观)+js(执行动作,特效) 数据库:sqlserver 动态部分:.net(平台),c#(语言 ...
- C#开发中Windows域认证登录2016(扩展吉日嘎拉GPM系统V4.2)
2013年搞公司的OA时,为了统一用户登录,将Windows AD的用户和OA的账号对接,OA用户名的规则就是使用Windows AD的用户名,格式举例:Troy.Cui,原理就是先进行域服务器的认证 ...
- 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cookie 读写; 自定义 HttpFilter; 其他
[源码下载] 重新想象 Windows 8.1 Store Apps (90) - 通信的新特性: 通过 HttpBaseProtocolFilter 实现 http 请求的缓存控制,以及 cooki ...
- ahjesus如何在windows下制作适用于mac的u盘启动盘
先用macdrive把U盘格式化成hfs+格式,然后下载原版dmg格式系统,再用ultraISO将dmg转成ISO格式(也可以不用转换),最后用ultraISO里面“启动”--->“写入硬盘映像 ...