基于asp.net MVC 的服务器和客户端的交互(三)之客户端请求响应
一、分析
WEB API 中HTTP 请求方式的四个主要方法 (GET, PUT, POST, DELETE), 按照下列方式映射为 CURD 操作:
- GET 用于获取 URI 资源的进行展示,GET 操作不应对服务端有任何影响,用于数据集合的Select查询;
- PUT 用于更新 URI 上的一个资源,如果服务端允许,PUT 也可以用于新建一个资源,用于相关的Insert插入操作;
- POST 用于新建资源,服务端在指定的URI 上创建一个新的对象,将新资源的地址作为响应消息的一部分返回,用于相关的Update;
- DELETE 用于删除指定的URI 资源。根据输入的参数进行相关的删除操作。
客户端除了可以使用旧有的 WebClient、HttpWebRequest 去访问服务器Api外,还可以使用新的 HttpClient 类别进行操作,HttpClient 类别是包含在 .Net Framework 4.5 中的 System.Net.Http 之命名空间底下,HttpClient 类别一般来说需要在 .Net Framework 4.5 上才能够使用,可以使用 NuGet 搜寻 Microsoft.Net.Http,NuGet 有提供 4.0 可以使用的安装包。
HttpClient类在传递信息的时候通常要通过多层的Handler,进行信息的层层传递,服务器接收到request请求,然后做出应答返回信息,这一过程也被人称为Delegating Handler.
而在网页端,也可以通过Jqery Ajax异步请求Web API获得数据.
- data (Map) : (可选参数) 发送至服务器的 key/value 数据。
- url (String) : 请求的HTML页的URL地址.
dataType:服务器返回的值会跟据这个数据类型进行解析。
- success:当请求之后调用,传入返回后的数据,以及包含成功代码的字符串。
dataType的数据类型
•"xml": 返回 XML 文档,可用 jQuery 处理。
•"html": 返回纯文本 HTML 信息;包含的 script 标签会在插入 dom 时执行。
•"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。除非设置了 "cache" 参数。注意:在远程请求时(不在同一个域下),所有 POST 请求都将转为 GET 请求。(因为将 使用 DOM 的 script标签来加载)
•"json": 返回 JSON 数据 。
•"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
•"text": 返回纯文本字符串
二、场景模拟
c# Application 控制台模拟访问请求get数据
使用HttpClient的PostAsync访问服务器Get请求获的Token,凭借令牌去访问数据,然后返回数据。
public class Token
{
[JsonProperty("Access_Token")]
public string AccessToken { get; set; }
}
static void Main(string[] args)
{
const string url = "http://localhost:14259/";
var client = new HttpClient();
var dict = new SortedDictionary<string, string>();
dict.Add("client_id", "xiangzhang");
dict.Add("client_secret", "");
dict.Add("grant_type", "client_credentials");
//var rst = await(@"http://" + Request.RequestUri.Authority + @"/token").PostUrlEncodedAsync(dict).ReceiveJson<Token>();
// Console.WriteLine(_httpClient.PostAsync("/token", new FormUrlEncodedContent(parameters)).Result.Content.ReadAsStringAsync().Result);
var rst = client.PostAsync(url + "token", new FormUrlEncodedContent(dict)).Result.Content.ReadAsStringAsync().Result;
var obj = JsonConvert.DeserializeObject<Token>(rst);
client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", obj.AccessToken);
rst = client.GetStringAsync(url + "api/values").Result;
Console.WriteLine(rst);
Console.ReadLine();
}
asp.net Jqery Ajax异步请求
var apiServiceBaseUri = "http://localhost:14259/";
$.ajax({
url: apiServiceBaseUri + "api/values",
type: "get",
dataType: "json",
headers: {
"Authorization": "Bearer " + accessToken
},
success: function (data) {
$("#h11").text(data);
},
error: function () {
alert("获取数据失败");
}
});
Get请求
$.ajax({
type: "post",
url: apiServiceBaseUri + "token",
data: { client_id: "irving", client_secret: "", grant_type: "client_credentials" },
dataType: "json",
success: function (data) {
accessToken = data.access_token;;
$.ajax({
type: "post",
url: '/Home/getAccessToken',
data: { token: accessToken },
dataType: "json"
});
},
error: function () {
alert("get Token arror!");
}
});
Post请求
基于asp.net MVC 的服务器和客户端的交互(三)之客户端请求响应的更多相关文章
- 基于asp.net MVC 的服务器和客户端的交互(一)
架构思想 三层架构 提出了一种基于ASP.NET开发方式的三层架构的Web应用系统构造思想.其基本内容是:将面向对象的UML建模与Web应用系统开发 相结合,将整个系统分成适合ASP.NET开发方式的 ...
- 基于asp.net MVC 的服务器和客户端的交互(二)之获取Oauth 2.0认证权限
基本Web API的ASP.NET的Oauth2认证 增加Token额外字段 增加Scope授权字段 持久化Token 设计Token的时间间隔 刷新Token后失效老的Token 自定义验证[重启I ...
- 基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)
1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个 ...
- 基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二)
基于ASP.NET MVC的热插拔模块式开发框架(OrchardNoCMS)介绍(二) 之前文章中给大家说明了下我这个小小的想法,发现还是有不少人的支持和关注.你们的鼓励是对我最大的支持. 我总结了了 ...
- 转发-基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现
基于ASP.NET MVC 4/5 Razor的模块化/插件式架构实现 概述 在日常开发中, 我们经常谈起模块化/插件化架构,这样可既可以提高开效率,又可以实现良好的扩展性,尤其对于产品化的系统有 ...
- 基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!
基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软 ...
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第二篇:第一个页面
摘要 本文首先一步一步完成Demo的第一个页面——首页.然后根据实现过程,说明一下其中用到的与ASP.NET MVC相关的概念与原理. 让第一个页面跑起来 现在,我们来实现公告系统 ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...
随机推荐
- cocos2d-x android黑屏后返回游戏卡顿
转自:http://blog.csdn.net/wolfking_2009/article/details/8824931 2013年5月17日更新:对于之前说的资源释放问题,cocos2d-x 2. ...
- counting sort 计数排序
//counting sort 计数排序 //参考算法导论8.2节 #include<cstdio> #include<cstring> #include<algorit ...
- ArcSDE 10.2建立SDE服务
从ArcGIS 10.1开始,arcgis官方推荐以直连方式连接SDE,因此在SDE安装时不再自动安装SDE服务,以下是手动安装SDE服务的方法 环境 服务端: oracle 11.2 64位,Arc ...
- vector和iterator及collection
Collection是所有集合的最上层接口,它里面定义了所有集合对象都可以进行的操作:它有两个子接口,分别是List和Set.List会记录放在其中元素的放入顺序,形象地说,可以认为是一个传送带,它上 ...
- COM组件入门(一)
近期须要用到COM组件的知识,看了看COM编程指南,感觉还不错.把我的学习心得记录下来.这是我依据教程写的demo StopWatch接口实现部分,接口部分我的项目是动态库,主要源代码例如以下: 完整 ...
- Skyline TerraExplorer Pro(等ActiveX控件)在Google Chrome浏览器的运行方法
首先感谢ActiveX for Chrome 网银助手(np-activex)这个项目(https://code.google.com/p/np-activex/),解决了我们困惑很久的问题——在Ch ...
- javascript Arguments对象——函数的实际参数
在javascript函数体内,标识符arguments具有特殊含义.它是调用对象的一个特殊属性,用来引用Arguments对象.Arugments对象就像数组,注意这里只是像并不是哈. javasc ...
- oc-21-class对象
/** 什么是类对象(Class对象)? 类在内存当中也是以对象形式进行存储的. 1.类对象的类型:Class类型 2.如何创建类对象: 1)Class 类对象名 = [类名 class]; 2)类名 ...
- Linux合并文件、去除重复行的命令
Linux合并文件命令: awk '{printf("%s\n",$0)}' YQ-*101?.txt > 123.txt linux去除重复行命令:cat YQ-10 ...
- 【ZZ】快速學會開發Android App
http://www.cc.ntu.edu.tw/chinese/epaper/0022/20120920_2209.html 作者:吳玉舒 / 臺灣大學計算機及資訊網路中心程式設計組幹事 智慧型手機 ...