@elf-express/admin-net-mcp 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/index.js +83 -88
  2. package/knowledge/Furion_Teaching_Manual/04-1-/351/205/215/347/275/256.md +442 -0
  3. package/knowledge/Furion_Teaching_Manual/04-2-/351/201/270/351/240/205.md +363 -0
  4. package/knowledge/Furion_Teaching_Manual/05-1-/345/213/225/346/205/213WebAPI.md +825 -0
  5. package/knowledge/Furion_Teaching_Manual/05-2-HttpContext.md +217 -0
  6. package/knowledge/Furion_Teaching_Manual/05-3-/347/257/251/351/201/270/345/231/250/346/224/224/346/210/252/345/231/250AOP.md +581 -0
  7. package/knowledge/Furion_Teaching_Manual/05-4-/350/253/213/346/261/202/347/250/275/346/240/270/346/227/245/350/252/214.md +129 -0
  8. package/knowledge/Furion_Teaching_Manual/05-5-/344/270/255/344/273/213/350/273/237/351/253/224Middleware.md +328 -0
  9. package/knowledge/Furion_Teaching_Manual/05-6-Vue-React-Angular/344/273/213/351/235/242/344/273/243/347/220/206.md +317 -0
  10. package/knowledge/Furion_Teaching_Manual/06-1/350/246/217/347/257/204/345/214/226/346/216/245/345/217/243.md +1458 -0
  11. package/knowledge/Furion_Teaching_Manual/06-2/347/254/254/344/270/211/346/226/271API_Scalar.md +91 -0
  12. package/knowledge/Furion_Teaching_Manual/07-/345/217/213/345/245/275/344/276/213/345/244/226/350/231/225/347/220/206.md +511 -0
  13. package/knowledge/Furion_Teaching_Manual/08-1-/350/263/207/346/226/231/351/251/227/350/255/211/345/237/272/347/244/216/344/275/277/347/224/250.md +587 -0
  14. package/knowledge/Furion_Teaching_Manual/10-1-SqlSugar/346/225/264/345/220/210.md +336 -0
  15. package/knowledge/Furion_Teaching_Manual/11-SaaS /345/244/232/347/247/237/346/210/266/347/255/206/350/250/230.md" +271 -0
  16. package/knowledge/Furion_Teaching_Manual/12-furion-dependency-injection.md +408 -0
  17. package/knowledge/Furion_Teaching_Manual/13-/347/211/251/344/273/266/350/263/207/346/226/231/346/230/240/345/260/204/357/274/210Mapster/357/274/211.md +162 -0
  18. package/knowledge/Furion_Teaching_Manual/14-/345/210/206/345/270/203/345/274/217/347/274/223/345/255/230.md +311 -0
  19. package/knowledge/Furion_Teaching_Manual/15-/345/256/211/345/205/250/351/211/264/346/235/203.md +832 -0
  20. package/knowledge/Furion_Teaching_Manual/17-/346/252/242/350/246/226/347/257/204/346/234/254/345/274/225/346/223/216.md +327 -0
  21. package/knowledge/Furion_Teaching_Manual/18-/346/227/245/350/252/214/350/250/230/351/214/204.md +639 -0
  22. package/knowledge/Furion_Teaching_Manual/19-1-HTTP/351/201/240/347/253/257/350/253/213/346/261/202/345/237/272/347/244/216/344/275/277/347/224/250.md +621 -0
  23. package/knowledge/Furion_Teaching_Manual/19-2-HTTP/351/201/240/347/253/257/350/253/213/346/261/202/351/200/262/351/232/216/346/214/207/345/215/227.md +928 -0
  24. package/knowledge/Furion_Teaching_Manual/19-3-HTTP/351/201/240/347/253/257/350/253/213/346/261/202/345/270/270/350/246/213/345/225/217/351/241/214.md +362 -0
  25. package/knowledge/Furion_Teaching_Manual/20-/350/263/207/346/226/231/345/212/240/350/247/243/345/257/206.md +286 -0
  26. package/knowledge/Furion_Teaching_Manual/20-/351/231/204/351/214/204-KSort/350/263/207/346/226/231/347/260/275/345/220/215/345/256/214/346/225/264/345/216/237/345/247/213/347/242/274.md +305 -0
  27. package/knowledge/Furion_Teaching_Manual/21-/345/205/250/347/220/203/345/214/226/345/222/214/346/234/254/345/234/260/345/214/226.md +342 -0
  28. package/knowledge/Furion_Teaching_Manual/22-/344/272/213/344/273/266/345/214/257/346/265/201/346/216/222EventBus.md +448 -0
  29. package/knowledge/Furion_Teaching_Manual/23-JSON/345/272/217/345/210/227/345/214/226.md +340 -0
  30. package/knowledge/Furion_Teaching_Manual/24-/345/215/263/346/231/202/351/200/232/350/250/212SignalR.md +247 -0
  31. package/knowledge/Furion_Teaching_Manual/25-/350/274/224/345/212/251/350/247/222/350/211/262/346/234/215/345/213/231WorkerService.md +295 -0
  32. package/knowledge/Furion_Teaching_Manual/26-1-/346/216/222/347/250/213/344/275/234/346/245/255/345/256/232/346/231/202/344/273/273/345/213/231.md +631 -0
  33. package/knowledge/Furion_Teaching_Manual/26-2-Cron/350/241/250/351/201/224/345/274/217.md +203 -0
  34. package/knowledge/Furion_Teaching_Manual/26-3-/344/273/273/345/213/231/344/275/207/345/210/227TaskQueue.md +215 -0
  35. package/knowledge/Furion_Teaching_Manual/27-/345/210/206/346/225/243/345/274/217ID/347/224/237/346/210/220.md +86 -0
  36. package/knowledge/Furion_Teaching_Manual/28-/346/250/241/347/265/204/345/214/226/351/226/213/347/231/274.md +68 -0
  37. package/knowledge/Furion_Teaching_Manual/29-/346/265/201/350/256/212/347/211/251/344/273/266Clay.md +313 -0
  38. package/knowledge/Furion_Teaching_Manual/30-/350/204/253/346/225/217/350/231/225/347/220/206/357/274/210Sensitive Detection).md" +168 -0
  39. package/knowledge/Furion_Teaching_Manual/32-/346/234/203/350/251/261/345/222/214/347/213/200/346/205/213/347/256/241/347/220/206.md +147 -0
  40. package/knowledge/Furion_Teaching_Manual/33-IPC/347/250/213/345/272/217/351/200/232/350/250/212.md +98 -0
  41. package/knowledge/Furion_Teaching_Manual/34-2-Docker/351/203/250/347/275/262.md +313 -0
  42. package/knowledge/Furion_Teaching_Manual/34-3-Nginx/351/203/250/347/275/262.md +157 -0
  43. package/knowledge/Furion_Teaching_Manual/34-8-WindowsService/351/203/250/347/275/262.md +112 -0
  44. package/knowledge/Furion_Teaching_Manual/35-1-Docker/347/222/260/345/242/203/346/214/201/347/272/214/351/203/250/347/275/262Jenkins.md +169 -0
  45. package/knowledge/Furion_Teaching_Manual/36-1-/345/226/256/345/205/203/346/270/254/350/251/246/346/225/264/345/220/210/346/270/254/350/251/246.md +275 -0
  46. package/knowledge/Furion_Teaching_Manual/36-3-/345/237/272/346/272/226/346/270/254/350/251/246Benchmarking.md +80 -0
  47. package/knowledge/attributes.md +153 -0
  48. package/knowledge/config.md +147 -0
  49. package/knowledge/entity.md +115 -0
  50. package/knowledge/event.md +124 -0
  51. package/knowledge/plugin.md +136 -0
  52. package/knowledge/service.md +146 -0
  53. package/knowledge/sqlsugar.md +172 -0
  54. package/knowledge/vue-typescript.md +338 -0
  55. package/package.json +3 -2
@@ -0,0 +1,217 @@
1
+ # 5.2 HttpContext
2
+
3
+ ## 📝 模組更新日誌
4
+
5
+ ### 新特性
6
+
7
+ - **新增** HttpContext 取得客戶端 IPv4 位址的 `GetRemoteIpAddressToIPv4` 方法 `xff` 參數 `4.9.4.3` ⏱️2024.07.01 `c280dfd`
8
+
9
+ ### 問題修復
10
+
11
+ - **修復** 透過 HttpContext 擴充方法 `GetRemoteIpAddressToIPv4(true)` 取得客戶端 IP 位址出現 null 問題 `4.9.8.6` ⏱️2026.01.26 `8ff27e5` `@boaro` `!934`
12
+ - **修復** 透過 HttpContext 擴充方法 `GetRemoteIpAddressToIPv4(true)` 取得客戶端 IP 位址出現多個 IP 問題 `4.9.7.246` ⏱️2026.01.14 `#IDJO6T`
13
+ - **修復** `HttpRequest.GetRequestUrlAddress` 擴充取得請求位址遺失埠號問題 `4.9.4.5` ⏱️2024.07.11 `6df5dbd`
14
+ - **修復** 啟用請求 Body 重複讀取且在授權之前讀取導致非 GET/HEAD/OPTION 請求異常 `4.8.7.15` ⏱️2023.03.19 `#I6NX9E`
15
+
16
+ ---
17
+
18
+ ## 5.2.1 關於 HttpContext
19
+
20
+ 在 ASP.NET 的時代,我們通常透過 `HttpContext` 全域靜態類別取得請求上下文,但在 ASP.NET Core 中,`HttpContext` 是一個非靜態的抽象類別,無法手動建立,也無法透過靜態方式取得。
21
+
22
+ 雖然在 ASP.NET Core 中無法直接取得 `HttpContext` 物件,但微軟提供了注入 `IHttpContextAccessor` 的方式來取得。
23
+
24
+ ---
25
+
26
+ ## 5.2.2 取得 HttpContext
27
+
28
+ ASP.NET Core 和 Furion 提供了多種存取 `HttpContext` 的方式。
29
+
30
+ ### 5.2.2.1 在 ControllerBase 衍生類別中
31
+
32
+ 在 `ControllerBase` 衍生類別中,可以直接透過 `HttpContext` 屬性取得:
33
+
34
+ ```csharp
35
+ public class HomeController : Controller
36
+ {
37
+ public IActionResult Index()
38
+ {
39
+ // HttpContext 是 Controller/ControllerBase 物件的屬性
40
+ var httpContext = HttpContext;
41
+ return View();
42
+ }
43
+ }
44
+ ```
45
+
46
+ ### 5.2.2.2 注入 IHttpContextAccessor
47
+
48
+ 在 Furion 框架中,預設已經註冊了 `IHttpContextAccessor` 服務,因此可以透過建構函式注入該介面:
49
+
50
+ ```csharp
51
+ public class AppService
52
+ {
53
+ public AppService(IHttpContextAccessor httpContextAccessor)
54
+ {
55
+ var httpContext = httpContextAccessor.HttpContext;
56
+ }
57
+ }
58
+ ```
59
+
60
+ ### 5.2.2.3 透過 App.HttpContext
61
+
62
+ `App` 靜態類別也提供了 `App.HttpContext` 來取得 `HttpContext` 物件:
63
+
64
+ ```csharp
65
+ var request = App.HttpContext.Request;
66
+ ```
67
+
68
+ > **非 Web 中存取**:在 Web 完整的生命週期內,`App.HttpContext` 都是有效的,但在非 Web 中會回傳 `null`,應避免在多執行緒、事件匯流排、定時任務等中使用。
69
+
70
+ ---
71
+
72
+ ## 5.2.3 HttpContext 擴充方法
73
+
74
+ Furion 框架基於 `HttpContext` 提供了一些常用的擴充方法。
75
+
76
+ ### 5.2.3.1 取得當前請求的特性 Attribute
77
+
78
+ 下列程式碼通常用於授權 Handler 中:
79
+
80
+ ```csharp
81
+ var attribute = httpContext.GetMetadata<SomeAttribute>();
82
+ ```
83
+
84
+ **在 Middleware 中介軟體中取得特性的方式:**
85
+
86
+ ```csharp
87
+ var endpointFeature = httpContext.Features.Get<IEndpointFeature>();
88
+ var attribute = endpointFeature?.Endpoint?.Metadata?.GetMetadata<SomeAttribute>();
89
+ ```
90
+
91
+ ### 5.2.3.2 設定 Swagger 自動授權
92
+
93
+ Swagger 預設不能記住授權資訊,一旦重新整理瀏覽器就會自動清空。Furion 提供了該擴充,即使重新整理瀏覽器也能保持授權狀態:
94
+
95
+ ```csharp
96
+ // 檢查使用者登入和產生 token 的程式碼...
97
+
98
+ // 呼叫該擴充,即可實現 Swagger 重新整理也能記住登入
99
+ httpContext.SigninToSwagger("你的token");
100
+ ```
101
+
102
+ ### 5.2.3.3 退出 Swagger 授權
103
+
104
+ 透過後端程式碼強制讓 Swagger 授權失效,只針對下一次請求有效:
105
+
106
+ ```csharp
107
+ httpContext.SignoutToSwagger();
108
+ ```
109
+
110
+ ### 5.2.3.4 取得本地 IP 位址
111
+
112
+ ```csharp
113
+ // IPv4
114
+ var ipv4 = httpContext.GetLocalIpAddressToIPv4();
115
+
116
+ // IPv6
117
+ var ipv6 = httpContext.GetLocalIpAddressToIPv6();
118
+ ```
119
+
120
+ ### 5.2.3.5 取得客戶端 IP 位址
121
+
122
+ ```csharp
123
+ // IPv4
124
+ var ipv4 = httpContext.GetRemoteIpAddressToIPv4();
125
+ // Furion 4.9.4.3+ 版本支援設定 xff: true,優先取得請求標頭 X-Forwarded-For 轉發的 IP 位址
126
+
127
+ // IPv6
128
+ var ipv6 = httpContext.GetRemoteIpAddressToIPv6();
129
+ ```
130
+
131
+ > **取得不到真實 IP 的處理方式**
132
+ >
133
+ > 使用了 Nginx 反向代理後可能會取得不到客戶端真實的 IP 位址,這時需要在 `Startup.cs` 中加入 IP 位址轉發設定:
134
+
135
+ ```csharp
136
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
137
+ {
138
+ app.UseForwardedHeaders(new ForwardedHeadersOptions
139
+ {
140
+ ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
141
+ });
142
+
143
+ // 其他程式碼...
144
+ }
145
+ ```
146
+
147
+ 如果加入以上設定後取得的仍然是 Nginx 代理伺服器的位址,可以嘗試使用以下設定:
148
+
149
+ ```csharp
150
+ // 註冊服務
151
+ services.Configure<ForwardedHeadersOptions>(options =>
152
+ {
153
+ options.ForwardedHeaders = ForwardedHeaders.All;
154
+ options.KnownNetworks.Clear();
155
+ options.KnownProxies.Clear();
156
+ });
157
+
158
+ // 中介軟體(確保第一個註冊)
159
+ app.UseForwardedHeaders(); // 無需參數
160
+ ```
161
+
162
+ ### 5.2.3.6 設定回應標頭 Token
163
+
164
+ ```csharp
165
+ httpContext.SetTokensOfResponseHeaders("token", "重新整理token");
166
+ ```
167
+
168
+ ---
169
+
170
+ ## 5.2.4 讀取 Body 內容(重複讀取)
171
+
172
+ > **版本說明**:僅限 Furion 4.7.9+ 版本使用。
173
+
174
+ 預設情況下,ASP.NET Core 不支援重複讀取 Body 內容,Furion 框架提供了擴充方法,需要按照以下步驟操作:
175
+
176
+ ### 步驟一:啟用 Body 重複讀取功能
177
+
178
+ **.NET5 版本:**
179
+
180
+ ```csharp
181
+ public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
182
+ {
183
+ // ...
184
+ app.EnableBuffering();
185
+ app.UseRouting();
186
+ // ....
187
+ }
188
+ ```
189
+
190
+ **.NET6+ 版本:**
191
+
192
+ ```csharp
193
+ var builder = WebApplication.CreateBuilder(args).Inject();
194
+ // ...
195
+ var app = builder.Build();
196
+ // ...
197
+ app.UseInject();
198
+
199
+ app.EnableBuffering();
200
+ app.MapControllers();
201
+
202
+ app.Run();
203
+ ```
204
+
205
+ > ⚠️ `app.EnableBuffering()` 必須在 `app.UseRouting()` 或 `app.MapControllers()` 之前註冊。
206
+
207
+ ### 步驟二:使用擴充方法讀取
208
+
209
+ ```csharp
210
+ // HttpContext 擴充
211
+ var body = await httpContext.ReadBodyContentAsync();
212
+
213
+ // HttpRequest 擴充
214
+ var body = await httpContext.Request.ReadBodyContentAsync();
215
+ ```
216
+
217
+ > **特別注意**:如果使用了 `AddJsonOptions` 或 `AddNewtonsoftJson` 序列化服務,請確保它們在 `.AddInjectXXX` 之前註冊。