feat(server): 添加浏览器内 OpenAPI 调试页及诊断入口

* 新增 DebugConsoleController,提供 /debug 纯内嵌调试页
  - 零外部依赖,基于 Swagger JSON 自动生成各端点表单
  - 与 Swagger:Enabled 同步开关,避免生产环境误暴露
* 启用 <GenerateDocumentationFile>,将 XML 注释注入 OpenAPI
  - 调试页与 Swagger UI 共用同一份端点标题和说明
* 为 Health/Status/LegacyHttpApi 控制器添加 Tags 分组
* 补充 VS Code launch.json 与 tasks.json,支持现场调试
* 新增 DebugConsoleEndpointTests 覆盖调试页基础响应
* 同步更新 README 进度与待办清单
This commit is contained in:
2026-04-27 10:33:53 +08:00
parent 69fa3edd89
commit 0292e077ff
12 changed files with 1650 additions and 12 deletions

67
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,67 @@
{
// VS Code 启动与调试配置
// 依赖 C# 扩展OmniSharp 或 C# Dev Kit提供 coreclr 调试器。
// 文档https://code.visualstudio.com/docs/csharp/debugger-settings
"version": "0.2.0",
"configurations": [
{
// 标准调试启动:编译并启动 Host命中断点浏览器自动打开首页
"name": ".NET Core Launch (Host)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
"run",
"--project",
"${workspaceFolder}/src/Flyshot.Server.Host/Flyshot.Server.Host.csproj",
"--no-launch-profile"
],
"cwd": "${workspaceFolder}",
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://localhost:5190"
},
"stopAtEntry": false,
"console": "internalConsole",
"preLaunchTask": "build",
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)",
"uriFormat": "%s"
}
},
{
// 热重载调试启动:自动编译、自动重启、断点保留;迭代 Web / 控制器层时首选
"name": ".NET Core Watch (Host)",
"type": "coreclr",
"request": "launch",
"program": "dotnet",
"args": [
"watch",
"run",
"--project",
"${workspaceFolder}/src/Flyshot.Server.Host/Flyshot.Server.Host.csproj",
"--no-launch-profile"
],
"cwd": "${workspaceFolder}",
"env": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_URLS": "http://localhost:5190"
},
"stopAtEntry": false,
"console": "integratedTerminal",
"serverReadyAction": {
"action": "openExternally",
"pattern": "\\bNow listening on:\\s+(https?://\\S+)",
"uriFormat": "%s"
}
},
{
// 附加到正在运行的 dotnet 进程(如已手动 `dotnet run` 或 Windows Service 模式)
"name": ".NET Core Attach",
"type": "coreclr",
"request": "attach",
"processId": "${command:pickProcess}"
}
]
}