zoukankan      html  css  js  c++  java
  • 基于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请求
  • 相关阅读:
    94. Binary Tree Inorder Traversal
    101. Symmetric Tree
    38. Count and Say
    28. Implement strStr()
    实训团队心得(1)
    探索性测试入门
    LC.278. First Bad Version
    Search in Unknown Sized Sorted Array
    LC.88. Merge Sorted Array
    LC.283.Move Zeroes
  • 原文地址:https://www.cnblogs.com/fuGuy/p/5666572.html
Copyright © 2011-2022 走看看