zoukankan      html  css  js  c++  java
  • WebAPI-HTTP编程模型

    带着问题去思考,大家好!
    它是什么?它包含什么?它能干什么?

    消息

    HTTP编程模型的核心就是消息抽象,表示为:HttPRequestMessage,HttpResponseMessage.用于客户端和服务端之间交换请求和响应消息。

    HttpMethod类包含了一组静态属性:

       private static readonly HttpMethod getMethod = new HttpMethod("GET");
    
            private static readonly HttpMethod putMethod = new HttpMethod("PUT");
    
            private static readonly HttpMethod postMethod = new HttpMethod("POST");
    
            private static readonly HttpMethod deleteMethod = new HttpMethod("DELETE");
    
            private static readonly HttpMethod headMethod = new HttpMethod("HEAD");
    
            private static readonly HttpMethod optionsMethod = new HttpMethod("OPTIONS");
    
            private static readonly HttpMethod traceMethod = new HttpMethod("TRACE")

    标头

    • HttpRequestHeaders:包含请求标头
    • HttpResponseHeaders:包含响应标头
    • HttpContentHeaders:包含内容标头

    消息内容

    HttpContent包含了非虚拟公共方法

    • Task<string> ReadAsStringAsync()
    • Task<byte[]> ReadAsByteArrayAsync()
    • Task<Stream> ReadAsStreamAsync()
    • Task CopyToAsync(Stream stream, TransportContext context)

    第一种方式用于推送方式访问原始的消息内容。将一个流传递给CopyAsync方法,然后把消息内容推送到这个流中

    using(car client=new HtppClient())
    {
        var response=
              await client.GetAsync("",HttpCompletionOption.ResponseHeadersRead);
    response.EnsureSuccessStatusCode();
    var ms=new MemorySteam();
    await response.Content.CopyToAsync(ms);
    Assert.True(ms.Length>0);
    }

    也可以使用ReadAsStreamAsync().拉取方式访问。这个方法异步返回一个流

                using(var client=new HttpClient())
                {
                    var response = await client.GetAsync("");
                    response.EnsureSuccessStatusCode();
                    var steam = await response.Content.ReadAsStreamAsync();
                    var buffer = new byte[2 * 1024];
                    var len = await steam.ReadAsync(buffer, 0, buffer.Length);
                   
                }

    ReadAsStringAsync和ReadAsByteArrayAsync-异步提供消息内容的缓冲副本。ReadAsStringAsync返回原始的字节内容,ReadAsByteArrayAsync将内容解码为字符串返回

    当然也可以扩展为

    public override Task<object> ReadContentAsync(HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters, IFormatterLogger formatterLogger)

  • 相关阅读:
    leetcode 268. Missing Number
    DBSCAN
    python二维数组初始化
    leetcode 661. Image Smoother
    leetcode 599. Minimum Index Sum of Two Lists
    Python中的sort() key含义
    leetcode 447. Number of Boomerangs
    leetcode 697. Degree of an Array
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(1月3日)
    北京Uber优步司机奖励政策(1月2日)
  • 原文地址:https://www.cnblogs.com/ccaa/p/12424200.html
Copyright © 2011-2022 走看看