基于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,凭借令牌去访问数据,然后返回数据。

1  public class Token
2         {
3             [JsonProperty("Access_Token")]
4             public string AccessToken { get; set; }
5         }

 1  static void Main(string[] args)
 2         {
 3             const string url = "http://localhost:14259/";
 4             var client = new HttpClient();
 5             var dict = new SortedDictionary<string, string>();
 6             dict.Add("client_id", "xiangzhang");
 7             dict.Add("client_secret", "212");
 8             dict.Add("grant_type", "client_credentials");
 9             //var rst = await(@"http://" + Request.RequestUri.Authority + @"/token").PostUrlEncodedAsync(dict).ReceiveJson<Token>();
10             // Console.WriteLine(_httpClient.PostAsync("/token", new FormUrlEncodedContent(parameters)).Result.Content.ReadAsStringAsync().Result);
11             var rst = client.PostAsync(url + "token", new FormUrlEncodedContent(dict)).Result.Content.ReadAsStringAsync().Result;
12             var obj = JsonConvert.DeserializeObject<Token>(rst);
13             client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", obj.AccessToken);
14             rst = client.GetStringAsync(url + "api/values").Result;
15             Console.WriteLine(rst);
16             Console.ReadLine();
17         }

asp.net Jqery Ajax异步请求

  1 var apiServiceBaseUri = "http://localhost:14259/";  

 1  $.ajax({
 2                     url: apiServiceBaseUri + "api/values",
 3                     type: "get",
 4                     dataType: "json",
 5                     headers: {
 6                         "Authorization": "Bearer " + accessToken
 7                     },
 8                     success: function (data) {
 9
10                         $("#h11").text(data);
11                     },
12                     error: function () {
13                         alert("获取数据失败");
14                     }
15                 });

Get请求

Put请求

 1  $.ajax({
 2                     type: "post",
 3                     url: apiServiceBaseUri + "token",
 4                     data: { client_id: "irving", client_secret: "123456", grant_type: "client_credentials" },
 5                     dataType: "json",
 6                     success: function (data) {
 7                         accessToken = data.access_token;;
 8                         $.ajax({
 9                             type: "post",
10                             url: ‘/Home/getAccessToken‘,
11                             data: { token: accessToken },
12                             dataType: "json"
13                         });
14                     },
15                     error: function () {
16                         alert("get Token arror!");
17                     }
18                 });

Post请求

时间: 2024-11-01 14:29:19

基于asp.net MVC 的服务器和客户端的交互(三)之客户端请求响应的相关文章

基于asp.net MVC 的服务器和客户端的交互(二)之获取Oauth 2.0认证权限

基本Web API的ASP.NET的Oauth2认证 增加Token额外字段 增加Scope授权字段 持久化Token 设计Token的时间间隔 刷新Token后失效老的Token 自定义验证[重启IIS池Token失效,验证权限] Oauth2 认证的流程 客户端发送口令(grant_type,client_id,client_secret)到服务端请求,认证返回access token ,然后客户端跟据获得的access token,根据Access Token获得权限去访问Web API.

基于ASP.NET MVC和Bootstrap搭建响应式个人博客站

1.0 为什么要做这个博客站? www.zynblog.com 在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个书签时,可能 就会忘记当时为什么要添加这个书签了,更有可能书签连接已经无效.这样一来,也就不方便自己查阅了.如果转载.收藏到自己的博客园账号中.CSDN账号 中,脚本之家中,知乎中等等,依然是很凌乱,不方便下次查阅. 因此,我下决心开发一个个人技术博客站.主要原因是:可以整合各种宝贵资源,将知识变为宝库

Orchard 基于 ASP.NET MVC 技术的免费开源内容管理系统

Orchard 是由微软公司创建,基于 ASP.NET MVC 技术的免费开源内容管理系统: 可用于建设博客.新闻门户.企业门户.行业网站门户等各种网站 简单易用的后台界面 性能稳定,功能齐全 热拔插模块化架构提供超强可扩展性 BSD 协议授权,可用于商业闭源项目 下载地址:https://orchard.codeplex.com/releases/view/119931 相关博客:http://www.orchardch.com/Blog 一个基于Orchard的开源CRM --coevery

基于ASP.NET MVC和Bootstrap搭建响应式个人博客站(一)

1.0 为什么要做这个博客站? www.zynblog.com   在工作学习中,经常要搜索查找各种各样的资料,每次找到相关资料后都会顺手添加到浏览器书签中,时间一长,书签也就满了.而且下次再点击这个书签时,可能 就会忘记当时为什么要添加这个书签了,更有可能书签连接已经无效.这样一来,也就不方便自己查阅了.如果转载.收藏到自己的博客园账号中.CSDN账号 中,脚本之家中,知乎中等等,依然是很凌乱,不方便下次查阅. 因此,我下决心开发一个个人技术博客站.主要原因是:可以整合各种宝贵资源,将知识变为

基于ASP.NET MVC的快速开发平台,给你的开发一个加速度!

基于ASP.NET MVC的快速开发平台,给你的开发一个加速度! bingo炸了 2017/4/6 11:07:21 阅读(37) 评论(0) 现在的人做事情都讲究效率,最好能达到事半功倍那种效果,软件行业也不例外.但是需求的一再变动,架构和业务功能的一改再改,往往使得软件的开发事倍功半.软件行业急需突破现现状,所以快速开发框架就这么应运而生了.但是市面上快速开发框架种类繁多,今天我给大家带来的是一套界面风格简洁大方.多业务功能.基于ASP.NET+MVC的快速开发框架. 体验地址我会在下文附上

ASP.NET MVC 4 中的JSON数据交互

前台Ajax请求很多时候需要从后台获取JSON格式数据,一般有以下方式: 拼接字符串 return Content("{\"id\":\"1\",\"name\":\"A\"}"); 为了严格符合Json数据格式,对双引号进行了转义. 使用JavaScriptSerialize.Serialize()方法将对象序列化为JSON格式的字符串 MSDN 例如我们有一个匿名对象: var tempObj=new

ASP.NET MVC 主要的四种过滤器和三种具体实现类

原文:ASP.NET MVC 主要的四种过滤器和三种具体实现类 4种常用过滤器(IAuthrorizationFilter.IActionFilter.IResultFilter.IExceptionFilter) 和 3种具体实现类(AuthorizeAttribute.ActionFilterAttribute(Action + Result).HandleErrorAttribute) (图片可放大) 原文地址:https://www.cnblogs.com/lonelyxmas/p/10

ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttribute应用到Model的类型或者属性上即可.对于自定义验证,我们也只需要定义相应的Validation 就可以了,不过服务端验证比较简单,而客户端验证就要稍微复杂一些,本文提供一个简单的实例说明在ASP.NET MVC中实现自定义验证的基本步骤.[源代码从这里下载] 一.AgeRangeAttr

GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的增多,平台已经臃肿不堪. 设计基于.NET的GPS部标平台,我们坚定不移的选择了基于JQUERY+Asp.NET MVC来作为前端交互和后台处理的框架.选用一个灵活的脚手架,同时团队又能掌握这个脚手架为团队所用. 对于一个web应用项目,基于MVC的框架,前面文章提到过,最大的优点就是结构清晰,强制