发布于2026-07-23 阅读(0)
扫一扫,手机访问
//初始化:必须先执行一次#!import ./ini.ipynb
参数直接塞在URL里,像这样:http://www.baidu.com?name=zhangsan&age=18。GET、HEAD请求最常用这种玩法。好处是简单、直观,浏览器还能缓存;但短板也很明显——参数长度有限制,数据直接暴露在地址栏里,一长串看着也不够优雅。
/** URL传参:适合简单数据类型*/{ //获取响应字符串 { var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1"); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content); } //获取响应对象 { var response = await SharedClient.GetAsync("api/Normal/GetAccount?id=1"); response.EnsureSuccessStatusCode(); var result = await response.Content.ReadFromJsonAsync>(); result.Display(); } //直接获取响应对象 { var result = await SharedClient.GetFromJsonAsync>("api/Normal/GetAccount?id=1"); result.Display(); }}
路由参数其实是URL的一部分,只不过由后端API提前定好了位置。比如后端要求/user/:id,前端就得传/user/1,这里的1就是路由参数。用起来很自然,但得跟后端商量好格式。
/*** 路由参数:参数是URL的一部分,由后端指定*/{//大括号:方便折叠、开成单独的作用域 var response = await SharedClient.GetAsync("api/Normal/GetAccount/管理员01"); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content);}
把数据塞进请求头发送给后端,也能传多个字段。不过请求头一般只适合传简单的文本数据,比如JWT Token这种。如果传中文,记得先编码,服务端收到后再解码。
/** 请求头: 值必须是字符串,如果有中文等需进行编码*/{ //中文先编码,服务端接收后要解码 var codedName = System.Net.WebUtility.UrlEncode("管理员01"); //SharedClient是共用的,所以不能多次添加,先移除旧值 if (SharedClient.DefaultRequestHeaders.Contains("name")) { SharedClient.DefaultRequestHeaders.Remove("name"); } SharedClient.DefaultRequestHeaders.Add("name", codedName); var response = await SharedClient.GetAsync("api/Normal/GetAccountFromHeader"); response.EnsureSuccessStatusCode(); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content);}
请求体是数据的主要载体,可以放简单的字符串,也可以放二进制文件、表单键值对、JSON、流式数据,甚至混搭多种类型。数据在底层都是二进制流,通过网络传到服务端,由服务端按约定解析。
关于请求体,有几点值得注意:
Content-Type请求头告诉服务端“我发的是哪种数据”,服务端据此识别处理。常见类型包括:multipart/form-data、application/x-www-form-urlencoded、application/json、text/plain等。FormUrlEncodedContent,所以通常客户端发的是表单数据。框架对JSON和表单数据有特殊支持,比如可以用[FromBody]特性自动绑定到模型;但普通文本就没这么方便了,得从请求体原始数据里自己解析。Content-Type: multipart/mixed; boundary="d2e38916-df08-4fec-a40e-3e5179736f32"拿到分隔符,然后按分隔符把数据拆开。HttpClient 中常用的请求体类型有:
MultipartFormDataContentFormUrlEncodedContentJsonContentStringContentByteArrayContentStreamContentMultipartContentForm表单是最常见的提交方式之一,适合上传文件或混合数据。
/** Form表单,提交数据。一般为Put或Post提交。*/{ var formContent = new MultipartFormDataContent(); formContent.Add(new StringContent("1"), "id"); formContent.Add(new StringContent("管理员01"), "name"); var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent); string responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString);}
/* FormUrlEncoded 提交数据 */{ var urlEncodedData = new List>() { new KeyValuePair(key:"id",value:"1"), new KeyValuePair(key:"name",value:"管理员01"), }; var formContent = new FormUrlEncodedContent(urlEncodedData); var response = await SharedClient.PostAsync("api/AdvancedGet/PostFormData", formContent); string responseString = await response.Content.ReadAsStringAsync(); Console.WriteLine(responseString);}
/* 普通文本方式提交数据*/{ var requestContent = new StringContent("我是请求体第一段内容", Encoding.UTF8, "text/plain"); var response = await SharedClient.PostAsync("/api/AdvancedPost/TextData", requestContent); var content = await response.Content.ReadAsStringAsync(); Console.WriteLine(content);}
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8