|
|
@ -11,7 +11,22 @@
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"source": [
|
|
|
|
"source": [
|
|
|
|
"# HttpClient 使用原则"
|
|
|
|
"# HttpClient 使用Json数据"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"现代Web中,Json是最常用的前后端交互数据。\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"手动处理Json数据,也是可以的,只不过需要服务端配合、比较繁杂,与使用框架提供的相关类库操作并没有本质区别,只不过使用框架更方便、稳定!\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
".Net HttpClient 提供了一流的Json数据支持:\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"+ System.Net.Http.Json 提供了序列化和反序列化 Json 数据功能\n",
|
|
|
|
|
|
|
|
"+ Microsoft.Extensions.Http 扩展库,提供了发送请求和接收响应时,对Json数据的扩展支持\n",
|
|
|
|
|
|
|
|
"+ Microsoft.Net.Http.Headers 提供请求或响应头的一些枚举及帮功能"
|
|
|
|
]
|
|
|
|
]
|
|
|
|
},
|
|
|
|
},
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -28,7 +43,260 @@
|
|
|
|
}
|
|
|
|
}
|
|
|
|
},
|
|
|
|
},
|
|
|
|
"source": [
|
|
|
|
"source": [
|
|
|
|
"## 1、复用"
|
|
|
|
"## 初始化"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
|
|
"polyglot_notebook": {
|
|
|
|
|
|
|
|
"kernelName": "csharp"
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"vscode": {
|
|
|
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"#!import \"./Ini.ipynb\""
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"## 手动管理 Json 数据"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"借助 `System.Net.Http.Json` 或者 `Newtonsoft.Json`类库,手动管理(序列化、反序列化等)Json数据也是可以的。"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"+ 在请求中使用Json数据"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"> 在请求中使用json数据,基本就是指在请求体中使用json。url参数、路由参数、请求头中,很少使用json数据;当然,如果使用也是可以的,只要服务端配合就行!"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
|
|
"polyglot_notebook": {
|
|
|
|
|
|
|
|
"kernelName": "csharp"
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"vscode": {
|
|
|
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"#r \"nuget:Newtonsoft.Json\"\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"{ //手动管理json\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //参数对象\n",
|
|
|
|
|
|
|
|
" var postData = new \n",
|
|
|
|
|
|
|
|
" {\n",
|
|
|
|
|
|
|
|
" id = 1,\n",
|
|
|
|
|
|
|
|
" name = \"小品王\"\n",
|
|
|
|
|
|
|
|
" };\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //手动转为json字符串\n",
|
|
|
|
|
|
|
|
" var textJsonData = Newtonsoft.Json.JsonConvert.SerializeObject(postData);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //请求内容\n",
|
|
|
|
|
|
|
|
" var requestContent = new StringContent(textJsonData, Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); \n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //发送请求\n",
|
|
|
|
|
|
|
|
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //读取响应内容\n",
|
|
|
|
|
|
|
|
" var content = await response.Content.ReadAsStringAsync();\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //输出响应内容\n",
|
|
|
|
|
|
|
|
" Console.WriteLine(content);\n",
|
|
|
|
|
|
|
|
"}"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"+ 使用Json格式响应数据"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
|
|
"polyglot_notebook": {
|
|
|
|
|
|
|
|
"kernelName": "csharp"
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"vscode": {
|
|
|
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"#r \"nuget:Newtonsoft.Json\"\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"{ //手动管理json\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //参数对象\n",
|
|
|
|
|
|
|
|
" var postData = new \n",
|
|
|
|
|
|
|
|
" {\n",
|
|
|
|
|
|
|
|
" id = 2,\n",
|
|
|
|
|
|
|
|
" name = \"线程张\"\n",
|
|
|
|
|
|
|
|
" };\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //手动转为json字符串\n",
|
|
|
|
|
|
|
|
" var textJsonData = Newtonsoft.Json.JsonConvert.SerializeObject(postData);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //请求内容\n",
|
|
|
|
|
|
|
|
" var requestContent = new StringContent(textJsonData, Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); \n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //发送请求\n",
|
|
|
|
|
|
|
|
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //读取响应内容\n",
|
|
|
|
|
|
|
|
" var content = await response.Content.ReadAsStringAsync();\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //手动反序列化Json为匿名对象(System.Text.Json不支持)\n",
|
|
|
|
|
|
|
|
" var responseObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(content,postData);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //输出响应内容\n",
|
|
|
|
|
|
|
|
" Console.WriteLine(content);\n",
|
|
|
|
|
|
|
|
"}"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"## 使用相关类库, 管理Json数据"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
".Net框架,提供了丰富的 Json 类库,使得在HttpClient中进行jsonr操作非常方便、好用!\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"确保引入了 Microsoft.Extensions.Http 类库"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"+ 在请求中使用json数据"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
|
|
"polyglot_notebook": {
|
|
|
|
|
|
|
|
"kernelName": "csharp"
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"vscode": {
|
|
|
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"{ //引入 Microsoft.Extensions.Http\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //参数对象\n",
|
|
|
|
|
|
|
|
" var postData = new \n",
|
|
|
|
|
|
|
|
" {\n",
|
|
|
|
|
|
|
|
" id = 2,\n",
|
|
|
|
|
|
|
|
" name = \"线程张\"\n",
|
|
|
|
|
|
|
|
" };\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //请求内容\n",
|
|
|
|
|
|
|
|
" var requestContent = JsonContent.Create(postData); \n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //发送请求\n",
|
|
|
|
|
|
|
|
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //读取响应内容\n",
|
|
|
|
|
|
|
|
" var content = await response.Content.ReadAsStringAsync();\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //手动反序列化Json为匿名对象(System.Text.Json不支持)\n",
|
|
|
|
|
|
|
|
" var responseObj = Newtonsoft.Json.JsonConvert.DeserializeAnonymousType(content,postData);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //输出响应内容\n",
|
|
|
|
|
|
|
|
" Console.WriteLine(content);\n",
|
|
|
|
|
|
|
|
"}"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"+ 使用响应中的json数据"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
|
|
|
"metadata": {
|
|
|
|
|
|
|
|
"polyglot_notebook": {
|
|
|
|
|
|
|
|
"kernelName": "csharp"
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"vscode": {
|
|
|
|
|
|
|
|
"languageId": "polyglot-notebook"
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
"outputs": [],
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"{ //引入 Microsoft.Extensions.Http\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //参数对象\n",
|
|
|
|
|
|
|
|
" var postData = new \n",
|
|
|
|
|
|
|
|
" {\n",
|
|
|
|
|
|
|
|
" id = 2,\n",
|
|
|
|
|
|
|
|
" name = \"线程张\"\n",
|
|
|
|
|
|
|
|
" };\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //请求内容\n",
|
|
|
|
|
|
|
|
" var requestContent = JsonContent.Create(postData); \n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //发送请求\n",
|
|
|
|
|
|
|
|
" var response = await SharedClient.PostAsync(\"/api/AdvancedPost/JsonData\", requestContent);\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" //读取响应内容,并且转为对象\n",
|
|
|
|
|
|
|
|
" var contentObject = await response.Content.ReadFromJsonAsync(postData.GetType());\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
" contentObject.Display();\n",
|
|
|
|
|
|
|
|
"}"
|
|
|
|
|
|
|
|
]
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
"cell_type": "markdown",
|
|
|
|
|
|
|
|
"metadata": {},
|
|
|
|
|
|
|
|
"source": [
|
|
|
|
|
|
|
|
"## 总结\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"不论是手动管理json,还是利用框架类库来管理,其原理都是一样的,无非是接受和响应json这种特定格式的数据。\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"只要熟悉了\"发送请求\"和\"接受响应\",json数据就非常容易。\n",
|
|
|
|
|
|
|
|
"\n",
|
|
|
|
|
|
|
|
"当然了,还是推荐使用框架提供的类库,非常方便、快捷,且不容出错!毕竟,框架类库的质量还是非常高的!"
|
|
|
|
]
|
|
|
|
]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
],
|
|
|
|
],
|
|
|
|