当前位置: 首页 > wzjs >正文

在北京大学生做家教的网站免费的企业黄页网站

在北京大学生做家教的网站,免费的企业黄页网站,微信视频号怎么推广引流,南京哪里做网站基础使用-发送请求 0、初始化与全局设置 //初始化:必须先执行一次 #!import ./ini.ipynb1、创建HttpClient 根据 系列教程的 管理客户端 一章, 创建的HttpClient对象,有非常多的方式。 为方便演示,本节使用两种:一种是全局共享…

基础使用-发送请求

0、初始化与全局设置

//初始化:必须先执行一次
#!import ./ini.ipynb

1、创建HttpClient

根据 系列教程的 管理客户端 一章, 创建的HttpClient对象,有非常多的方式。
为方便演示,本节使用两种:一种是全局共享对象(SharedClient, 在初始化时创建), 符合共享的使用原则; 一种是临时实例化对象。

2、发出 Http请求

Http 简介

http是无状态的请求/响应模式。

客户端请求: 请求行(方法 URL 协议版本 回车换行符)、请求头、空行及可选的请求体;
在这里插入图片描述

服务器响应:状态行(协议版本 状态码 状态码描述 回车换行符)、响应头及可选的响应体。

在这里插入图片描述

Http 请求方法

Http请求方法可通过多种特性区分:

  1. 谓词:也就是请求方法,Post、Get、Put、Delete、Options、Head等;

  2. 幂等性:如果可多次成功处理某个请求方法而不改变结果,则该请求方法是幂等的;

  3. 可缓存性:如果可以存储请求方法的相应响应以供重复使用,则该请求方法是可缓存的;

  4. 安全性:如果请求方法不会修改资源的状态,则被视为安全方法。所有安全方法也都是幂等方法,但并非所有幂等方法都是安全方法;

    HTTP 方法是否是幂等的是否可缓存是否安全
    GET✔️ 是✔️ 是✔️ 是
    POST❌ 否⚠️ †很少❌ 否
    PUT✔️ 是❌ 否❌ 否
    PATCH❌ 否❌ 否❌ 否
    DELETE✔️ 是❌ 否❌ 否
    HEAD✔️ 是✔️ 是✔️ 是
    OPTIONS✔️ 是❌ 否✔️ 是
    TRACE✔️ 是❌ 否✔️ 是
    CONNECT❌ 否❌ 否❌ 否

†仅当存在相应的 Cache-Control 或 Expires 响应标头时,POST 方法才可缓存。 这在实践中非常罕见。

Http 状态码

Http 状态码是响应的首要标识,指定响应的不同结果,分为以下几类:

  1. 1xx:信息,表示临时响应,大多数临时响应 (例如 HttpStatusCode.Continue) 使用 HttpClient 在内部处理,并且永远不会显示给用户;
  2. 2xx:成功,表示请求已被成功接收、理解、并接受;
  3. 3xx:重定向,表示需要完成一个或多个附加步骤才能完成请求,自动重定向默认处于打开状态,可以使用 HttpClientHandler.AllowAutoRedirect 或 SocketsHttpHandler.AllowAutoRedirect 进行更改;
  4. 4xx:客户端错误,表示客户端的请求无效(请求包含语法错误或无法完成请求);
  5. 5xx:服务器错误,表示服务器在处理请求的过程中发生了错误。

使用 HttpClient 发出请求

要发出 HTTP 请求,请调用以下任一 API:

HTTP 方法API
GETHttpClient.GetAsync
GETHttpClient.GetByteArrayAsync
GETHttpClient.GetStreamAsync
GETHttpClient.GetStringAsync
POSTHttpClient.PostAsync
PUTHttpClient.PutAsync
PATCHHttpClient.PatchAsync
DELETEHttpClient.DeleteAsync
USER SPECIFIEDHttpClient.SendAsync

†USER SPECIFIED 请求指示 SendAsync 方法接受任何有效的 HttpMethod。

Http 内容

HttpContent 类型用于表示 HTTP 实体正文和相应的内容标头。 对于需要正文的 HTTP 方法(或请求方法)POST、PUT 和 PATCH,可使用 HttpContent 类来指定请求的正文。
大多数示例演示如何使用 JSON 有效负载准备 StringContent 子类,但还有针对其他内容 (MIME) 类型的其他子类。

  • ByteArrayContent:提供基于字节数组的 HTTP 内容;
  • FormUrlEncodedContent:为使用 “application/x-www-form-urlencoded” MIME 类型编码的名称/值元组提供 HTTP 内容;
  • JsonContent:提供基于 JSON 的 HTTP 内容;
  • MultipartContent:提供使用 “multipart/*” MIME 类型规范进行序列化的 HttpContent 对象的集合;
  • MultipartFormDataContent:为使用 “multipart/form-data” MIME 类型进行编码的内容提供容器;
  • ReadOnlyMemoryContent:提供基于 ReadOnlyMemory 的 HTTP 内容;
  • StreamContent:提供基于流的 HTTP 内容;
  • StringContent:提供基于字符串的 HTTP 内容

Http Get

GET 请求不应发送正文,而是用于从资源检索数据。 要在给定 HttpClient 和 URI 的情况下发出 HTTP GET 请求,推荐使用 HttpClient.GetAsync 方法。

Get 请求,一般不会发送数据(服务器支持的话,也能带),最大特点是:可以缓存请求结果,减少服务器压力。

//Get 请求
{//使用共享客户端发送Get请求var response = await SharedClient.GetAsync("/api/hello/index");//确保请求成功response.EnsureSuccessStatusCode();//读取响应内容var content = await response.Content.ReadAsStringAsync();//输出 响应内容Console.WriteLine(content);
}

Http Get Json

System.Net.Http.Json 库,为请求Json格式数据和接受json格式数据提供了很多扩展方法,使用 HttpClient 发送和请求Json格式数据非常方便;
后面单独章节讲解,这里只是一个例子.

/*方式一:使用 System.Net.Http.JsonGet Json需要先引入 System.Net.Http.Json 和 命名空间(全局设置里已完成)
*/
{//使用共享客户端发送Get请求var content = await SharedClient.GetFromJsonAsync<HttpClientStudy.Model.Account>("/api/hello/GetAccount");//框架显示方法content.Display();
}/*方式二:ReadFromJsonAsync 方法,读取响应内容(HttpResonseMessage.Content)
*/
{var response = await SharedClient.GetAsync("/api/hello/GetAccount");response.EnsureSuccessStatusCode();var content = await response.Content.ReadFromJsonAsync<HttpClientStudy.Model.Account>();content.Display();
}/*方式三:手动序列化读取的响应内容
*/
{var response = await SharedClient.GetAsync("/api/hello/GetAccount");response.EnsureSuccessStatusCode();var content = await response.Content.ReadAsStringAsync();var account =  System.Text.Json.JsonSerializer.Deserialize<HttpClientStudy.Model.Account>(content);account.Display();
}

HTTP Post

POST 请求将数据发送到服务器进行处理。 请求的 Content-Type 标头表示正文发送的 MIME 类型。 要在给定 HttpClient 和 Uri 的情况下发出 HTTP POST 请求,请使用 HttpClient.PostAsync 方法.
请求数据可选:包括 请求URL、路由、请求头、请求体(包括多种方式,后面详解)

//不带请求体
{var response = await SharedClient.PostAsync("/api/hello/Post",null);response.EnsureSuccessStatusCode();var context = await response.Content.ReadAsStringAsync();Console.WriteLine(context);
}//带请求体
{var account = new Account(){Id =0,Name = "小王",};//请求体有很多:后面专门章节讲解var requestContent = new StringContent(System.Text.Json.JsonSerializer.Serialize(account), System.Text.Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json);var response = await SharedClient.PostAsync("/api/hello/AddAccount", requestContent);response.EnsureSuccessStatusCode();var context = await response.Content.ReadAsStringAsync();Console.WriteLine(context);
}

HTTP Put

PUT 请求方法会替换现有资源,或使用请求正文有效负载创建一个新资源。 要在给定 HttpClient 和 URI 的情况下发出 HTTP PUT 请求,请使用 HttpClient.PutAsync 方法。

/* Put请求, 一般是添加或修改资源:需要数据。这里故意使用查询,没有资源:意在说明:Get、Post、Put等谓词的使用,只是行业规范(有些服务器做了特殊处理),不具有强制性。并且,从http协议上说,没有本质区别。      
*/
{var response = await SharedClient.PutAsync("/api/Normal/PutDemo?id=2", null);response.EnsureSuccessStatusCode();var content = await response.Content.ReadAsStringAsync();Console.WriteLine(content);//或者直接获取对象var result = await response.Content.ReadFromJsonAsync<BaseResult<Account>>();result.Display();
}

HTTP Head

HEAD 请求类似于请求 GET。 它只返回与资源关联的标头,而不返回资源。 对 HEAD 请求的响应不会返回正文。
要在给定 HttpClient 和 URI 的情况下发出 HTTP HEAD 请求,请使用 HttpClient.SendAsync 方法并将 HttpMethod 设置为 HttpMethod.Head
注意:系统没有提供单独的Head方法,要使用通用的Send或者SendAsync

//Head请求,借助SendAsync方法
{var requestMessage = new HttpRequestMessage(HttpMethod.Head, "/api/Normal/HeadDemo?id=2");var response = await SharedClient.SendAsync(requestMessage);response.EnsureSuccessStatusCode();//Head请求,没有响应内容。var content = await response.Content.ReadAsStringAsync();Console.WriteLine(response.Content.Headers.ContentLength > 0 ? "有响应体":"无响应体");
}

HTTP Patch

PATCH 请求是对现有资源执行部分更新。 它不会创建新资源,也不会替换现有资源。 而是只更新部分资源。 要在给定 HttpClient 和 URI 的情况下发出 HTTP PATCH 请求,请使用 HttpClient.PatchAsync 方法

//Patch请求
{var account = new Account(){Id = 1,Name = "Patch更新"};StringContent jsonContent = new(System.Text.Json.JsonSerializer.Serialize(account), Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.JsonPatch);HttpResponseMessage response = await SharedClient.PatchAsync( "api/Normal/PatchDemo", jsonContent);response.EnsureSuccessStatusCode();var context = await response.Content.ReadAsStringAsync();Console.WriteLine($"{context}");
}

HTTP Delete

DELETE 请求会删除现有资源。 DELETE 请求是幂等的但不是安全的,这意味着对同一资源发出的多个 DELETE 请求会产生相同的结果,但该请求会影响资源的状态。 要在给定 HttpClient 和 URI 的情况下发出 HTTP DELETE 请求,请使用 HttpClient.DeleteAsync 方法.

//Delete 删除资源
{HttpResponseMessage response = await SharedClient.DeleteAsync( "api/Normal/Delete?id=1");response.EnsureSuccessStatusCode();var context = await response.Content.ReadAsStringAsync();Console.WriteLine($"{context}");
}

HTTP Options

OPTIONS 请求用于标识服务器或终结点支持哪些 HTTP 方法。 要在给定 HttpClient 和 URI 的情况下发出 HTTP OPTIONS 请求,请使用 HttpClient.SendAsync 方法并将 HttpMethod 设置为 HttpMethod.Options

//Options 预检请求
{var requestMessage = new HttpRequestMessage(HttpMethod.Options, "api/Normal/OptionsSimple");HttpResponseMessage response = await SharedClient.SendAsync(requestMessage);response.EnsureSuccessStatusCode();var context = await response.Content.ReadAsStringAsync();Console.WriteLine($"{context}");
}

HTTP Trace

TRACE 请求可用于调试,因为它提供请求消息的应用程序级环回。 要发出 HTTP TRACE 请求,请使用 HttpMethod.Trace 创建 HttpRequestMessage
特别注意:ASP.NET WebApi 并不直接支持 Trace 请求;一个简单方法是使用一个专用的中间件,来支持所有接口的Trace请求.(需要服务器支持)

//trace 服务器已设置专门中间件支持所有接口的Trace请求
{var requestMessage = new HttpRequestMessage(HttpMethod.Trace,"api/Normal/TraceDemo?accountId=1");requestMessage.Content = new StringContent("我是请求内容",Encoding.UTF8,System.Net.Mime.MediaTypeNames.Text.Plain);var response = await SharedClient.SendAsync(requestMessage);response.EnsureSuccessStatusCode();var context = await response.Content.ReadAsStringAsync();Console.WriteLine(context);
}
http://www.dtcms.com/wzjs/52060.html

相关文章:

  • 做视频参考什么网站百度站长工具验证
  • 定制网站多少钱杭州网站优化培训
  • 网站的登录注册怎么做站长之家关键词查询
  • 营销型网站建设 合肥搜索关键词推荐
  • 算卦网站哪里可以做seo关键词优化技术
  • 如皋做网站ntgmwl百度查询入口
  • 做专业网站中国大数据平台官网
  • 做网站是用的那个开发软件上google必须翻墙吗
  • 外贸网站怎么做seo优化获取排名
  • 兰溪做网站哪家好怎么样做网站推广
  • 手工艺品网站建设上海网络推广服务公司
  • 网站需要服务器吗?seo入门培训学校
  • 苏州工业园区建设局网站今天发生的重大新闻事件
  • 网站开发项目公司产品推广方案
  • 网站开发最佳组合水果网络营销推广方案
  • ip网站怎么做seo网络推广到底是做什么的
  • 深圳网站建设开发哪家好长沙全网推广
  • 网站制作公司去哪找重庆的seo服务公司
  • 做网站卖别人的软件可以吗上海谷歌优化
  • 网站建设优化经验江苏seo哪家好
  • 哪里可以找到制作网站的公司优化大师windows
  • wordpress更改首页模板百家号seo怎么做
  • 可信网站认证必须做吧今日军事新闻报道
  • seo网站推广案例培训课程设计方案
  • 做公众号的素材网站企业排名优化公司
  • 石家庄免费专业做网站百度app交易平台
  • 高端论坛网站建设培训机构哪家最好
  • 秀人网络科技有限公司seo营销推广多少钱
  • 自己的网站源代码一片空白广州最新疫情通报
  • wordpress重新打开多站点seo北京