处理错误与异常

main
bicijinlian 3 days ago
parent 20000e83cc
commit 74d783effd

@ -65,9 +65,9 @@
"+ [发送请求](./1.3.1.基础使用.发送请求.ipynb)\n",
"+ [使用请求数据](./1.3.2.基础使用.使用请求数据.ipynb)\n",
"+ [处理响应](./1.3.3.基础使用.处理响应.ipynb)\n",
"+ [处理错误](./1.3.4.基础使用.处理错误.ipynb)\n",
"+ [使用代理](./1.3.5.基础使用.使用代理.ipynb)\n",
"+ [使用Json](./1.3.6.基础使用.使用Json.ipynb)\n",
"+ [使用Json](./1.3.4.基础使用.使用Json.ipynb)\n",
"+ [处理错误](./1.3.5.基础使用.处理错误.ipynb)\n",
"+ [使用代理](./1.3.6.基础使用.使用代理.ipynb)\n",
"+ [使用Cookie](./1.3.7.基础使用.使用Cookie.ipynb)"
]
},

@ -252,7 +252,11 @@
"cell_type": "code",
"execution_count": null,
"id": "7e6f752c",
"metadata": {},
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"outputs": [
{
"name": "stdout",

@ -1319,7 +1319,7 @@
},
{
"cell_type": "code",
"execution_count": 38,
"execution_count": null,
"metadata": {
"dotnet_interactive": {
"language": "csharp"
@ -1403,7 +1403,7 @@
"\n",
"// 方式1(不推荐)类型化客户端直接注入IoC,并从中获取实例。优点是范围可以自己选择。\n",
"{\n",
" Console.WriteLine(\"方式1 -------------------------------------------------------------------\");\n",
" Console.WriteLine(\"方式1 直接注入IoC ------------------------------------------------------\");\n",
" var services = new ServiceCollection();\n",
" services.AddSingleton<HttpClientServiceA>(b => \n",
" { \n",
@ -1424,12 +1424,12 @@
" var dataB = await serverB.PingAsync();\n",
" Console.WriteLine(dataB);\n",
"\n",
" Console.WriteLine(\"========================================================================\");\n",
" Console.WriteLine(\"==============================结束======================================\");\n",
"}\n",
"\n",
"// 方式2类型化客户端AddHttpClient<>() 设置\n",
"{\n",
" Console.WriteLine(\"方式2 -------------------------------------------------------------------\");\n",
" Console.WriteLine(\"方式2 AddHttpClient<>() 设置---------------------------------------------\");\n",
" var services = new ServiceCollection();\n",
" services\n",
" .AddHttpClient<HttpClientServiceA>()\n",
@ -1455,12 +1455,12 @@
" var dataB = await serverB.PingAsync();\n",
" Console.WriteLine(dataB);\n",
"\n",
" Console.WriteLine(\"========================================================================\");\n",
" Console.WriteLine(\"==============================结束======================================\");\n",
"}\n",
"\n",
"// 方式3类型化客户端结合工厂由工厂从统一配置中提供类型化客户端中使用的HttpClient实例。\n",
"{\n",
" Console.WriteLine(\"方式3 -------------------------------------------------------------------\");\n",
" Console.WriteLine(\"方式3 结合工厂-----------------------------------------------------------\");\n",
" var services = new ServiceCollection();\n",
" services.AddHttpClient<HttpClientServiceA>(client => \n",
" {\n",
@ -1502,7 +1502,7 @@
" var dataB2 = await serviceB2.PingAsync();\n",
" Console.WriteLine(dataB2);\n",
"\n",
" Console.WriteLine(\"========================================================================\");\n",
" Console.WriteLine(\"==============================结束======================================\");\n",
"}"
]
},

@ -1,205 +0,0 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
}
},
"source": [
"# HttpClient 处理错误与异常"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"根据客户端的创建方法不周有不同的错误与异常处理方式。推荐类型化客户端、工厂和Polly库中统一处理"
]
},
{
"cell_type": "markdown",
"metadata": {
"dotnet_interactive": {
"language": "csharp"
},
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"source": [
"## 初始化"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"outputs": [
{
"data": {
"text/markdown": [
"## 初始化\n",
"这是全局共用文件包括Nuget包引用、全局类库引用、全局文件引用、全局命名空间引用、全局变量、全局方法、全局类定义等功能。\n",
"\n",
"在业务笔记中引用,执行其它单元格之前先执行一次。"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"text/html": [
"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Microsoft.Extensions.DependencyInjection, 9.0.4</span></li><li><span>Microsoft.Extensions.Http, 9.0.4</span></li><li><span>Microsoft.Extensions.Http.Polly, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging.Console, 9.0.4</span></li><li><span>Microsoft.Net.Http.Headers, 9.0.4</span></li><li><span>Polly, 8.5.2</span></li><li><span>Refit, 8.0.0</span></li><li><span>Refit.HttpClientFactory, 8.0.0</span></li><li><span>System.Net.Http.Json, 9.0.4</span></li></ul></div></div>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"配置文件根目录c:\\Users\\ruyu\\Desktop\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.Core\n",
"配置文件根目录c:\\Users\\ruyu\\Desktop\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.Core\n",
"启动WebApi项目...\n",
"程序[c:\\Users\\ruyu\\Desktop\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.WebApp\\HttpClientStudy.WebApp.exe]已在新的命令行窗口执行。如果未出现新命令行窗口,可能是程序错误造成窗口闪现!\n",
"已启动WebApi项目,保持窗口打开状态!\n",
"初始化完成!\n"
]
}
],
"source": [
"#!import ./Ini.ipynb"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 常规方法 try catch"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"直接实例化客户端时,可以用`Try Catch`简单处理,这种是最不推荐的方式!"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
},
"vscode": {
"languageId": "polyglot-notebook"
}
},
"outputs": [],
"source": [
"/*\n",
" 每次请求都实例化:并发量大、请求频繁进会耗尽套接字端口\n",
"*/\n",
"{ \n",
" var baseUrl = WebApiConfigManager.GetWebApiConfig().BaseUrl;\n",
"\n",
" using(var client = new HttpClient())\n",
" {\n",
" //发送请求\n",
" var response = await client.GetAsync(baseUrl);\n",
" response.EnsureSuccessStatusCode();\n",
" }\n",
"\n",
" //显示句柄\n",
" var displayValue = display($\"第 0 次请求,成功!\");\n",
"\n",
" for(int i=0;i<10;i++)\n",
" {\n",
" using(var client = new HttpClient())\n",
" {\n",
" var response = await client.GetAsync(baseUrl);\n",
" response.EnsureSuccessStatusCode();\n",
" displayValue.Update($\"第 {i+1} 次/ 共 10 次请求,成功!\");\n",
" }\n",
" }\n",
"}"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 静态或工具类中处理"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 类型化客户端中处理"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 在管道中,添加异常中间件"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 工厂模式中统一处理"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Polly库处理"
]
}
],
"metadata": {
"kernelspec": {
"display_name": ".NET (C#)",
"language": "C#",
"name": ".net-csharp"
},
"language_info": {
"name": "python"
},
"polyglot_notebook": {
"kernelInfo": {
"defaultKernelName": "csharp",
"items": [
{
"aliases": [],
"name": "csharp"
}
]
}
}
},
"nbformat": 4,
"nbformat_minor": 2
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 176 KiB

@ -12,7 +12,7 @@
},
{
"cell_type": "code",
"execution_count": null,
"execution_count": 1,
"metadata": {
"polyglot_notebook": {
"kernelName": "csharp"
@ -22,7 +22,7 @@
{
"data": {
"text/html": [
"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Microsoft.Extensions.DependencyInjection, 9.0.3</span></li><li><span>Microsoft.Extensions.Http, 9.0.3</span></li><li><span>Microsoft.Extensions.Http.Polly, 9.0.3</span></li><li><span>Microsoft.Extensions.Logging, 9.0.3</span></li><li><span>Microsoft.Extensions.Logging.Console, 9.0.3</span></li><li><span>Microsoft.Net.Http.Headers, 9.0.3</span></li><li><span>Polly, 8.5.2</span></li><li><span>Refit, 8.0.0</span></li><li><span>Refit.HttpClientFactory, 8.0.0</span></li><li><span>System.Net.Http.Json, 9.0.3</span></li></ul></div></div>"
"<div><div></div><div></div><div><strong>Installed Packages</strong><ul><li><span>Microsoft.Extensions.DependencyInjection, 9.0.4</span></li><li><span>Microsoft.Extensions.Http, 9.0.4</span></li><li><span>Microsoft.Extensions.Http.Polly, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging, 9.0.4</span></li><li><span>Microsoft.Extensions.Logging.Console, 9.0.4</span></li><li><span>Microsoft.Net.Http.Headers, 9.0.4</span></li><li><span>Polly, 8.5.2</span></li><li><span>Refit, 8.0.0</span></li><li><span>Refit.HttpClientFactory, 8.0.0</span></li><li><span>System.Net.Http.Json, 9.0.4</span></li></ul></div></div>"
]
},
"metadata": {},
@ -32,10 +32,10 @@
"name": "stdout",
"output_type": "stream",
"text": [
"配置文件根目录:d:\\软件项目\\学习项目\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.Core\n",
"配置文件根目录:d:\\软件项目\\学习项目\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.Core\n",
"配置文件根目录:c:\\Users\\ruyu\\Desktop\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.Core\n",
"配置文件根目录:c:\\Users\\ruyu\\Desktop\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.Core\n",
"启动WebApi项目...\n",
"程序[d:\\软件项目\\学习项目\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.WebApp\\HttpClientStudy.WebApp.exe]已在新的命令行窗口执行。如果未出现新命令行窗口,可能是程序错误造成窗口闪现!\n",
"程序[c:\\Users\\ruyu\\Desktop\\HttpClientStudy\\Docs\\Publish\\HttpClientStudy.WebApp\\HttpClientStudy.WebApp.exe]已在新的命令行窗口执行。如果未出现新命令行窗口,可能是程序错误造成窗口闪现!\n",
"已启动WebApi项目,保持窗口打开状态!\n",
"初始化完成!\n"
]
@ -106,6 +106,7 @@
"\n",
"//全局变量\n",
"var webApiBaseUrl = WebApiConfigManager.GetWebApiConfig().BaseUrl;\n",
"var webApiBaseUri = new Uri(webApiBaseUrl);\n",
"var workDir = Environment.CurrentDirectory;\n",
"var fullPath = System.IO.Path.GetFullPath(\"./Publish/HttpClientStudy.WebApp/HttpClientStudy.WebApp.exe\", workDir);\n",
"//fullPath.Display();\n",

Loading…
Cancel
Save