• 基于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         }
    View Code
     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         }
    View Code

    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请求
  • 相关阅读:
    垃圾回收的整个过程
    实验:老年代空闲空间放不下minorgc晋升的对象发生fullgc
    实验: survivor放不下的对象进入老年代
    实验: 动态对象年龄判定
    永久代、栈内存大小怎么设置
    如何设置高并发系统的jvm堆内存大小
    Bin、App_Data等文件夹详述(转自http://blog.csdn.net/zzjiadw/article/details/6801506)
    谈谈并行、并发或多线程
    SQL---存储过程---存储过程编写案例
    SQL---存储过程---sp_addextendedproperty表字段加描述
  • 原文地址:https://www.cnblogs.com/fuGuy/p/5666572.html
Copyright © 2020-2023  润新知