Browse Source

构建Docker镜像

黄中银 1 week ago
parent
commit
15f2c1cf72
47 changed files with 12399 additions and 64 deletions
  1. 12 0
      Apq.Cfg.WebUI/.dockerignore
  2. 8 8
      Apq.Cfg.WebUI/Dockerfile
  3. 26 0
      Apq.Cfg.WebUI/Dockerfile.cn
  4. 6 2
      Apq.Cfg.WebUI/README.md
  5. 2 0
      Apq.Cfg.WebUI/buildDockerImage_u24_docker.bat
  6. 155 0
      Apq.Cfg.WebUI/buildDockerImage_u24_docker.ps1
  7. 2 1
      buildTools/pack-release.ps1
  8. 162 4
      docs/docfx/api/.manifest
  9. 2 1
      docs/docfx/docfx.json
  10. 2 0
      docs/site/index.md
  11. 21 12
      docs/site/public/api-reference/api/Apq.Cfg.CfgBuilder.html
  12. 120 0
      docs/site/public/api-reference/api/Apq.Cfg.ICfgRoot.html
  13. 215 0
      docs/site/public/api-reference/api/Apq.Cfg.Sources.CfgSourceExtensions.html
  14. 399 0
      docs/site/public/api-reference/api/Apq.Cfg.Sources.ConfigSourceInfo.html
  15. 205 3
      docs/site/public/api-reference/api/Apq.Cfg.Sources.File.FileCfgSourceBase.html
  16. 168 0
      docs/site/public/api-reference/api/Apq.Cfg.Sources.ICfgSource.html
  17. 216 0
      docs/site/public/api-reference/api/Apq.Cfg.Sources.IFileCfgSource.html
  18. 22 0
      docs/site/public/api-reference/api/Apq.Cfg.Sources.IWritableCfgSource.html
  19. 18 0
      docs/site/public/api-reference/api/Apq.Cfg.Sources.html
  20. 252 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html
  21. 341 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html
  22. 282 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html
  23. 208 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.html
  24. 135 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.html
  25. 157 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.AuthenticationType.html
  26. 1382 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Controllers.ConfigController.html
  27. 125 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Controllers.html
  28. 335 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.JwtOptions.html
  29. 251 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html
  30. 125 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Middleware.html
  31. 382 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ApiResponse-1.html
  32. 341 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ApiResponse.html
  33. 270 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html
  34. 330 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html
  35. 299 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html
  36. 145 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.html
  37. 336 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html
  38. 809 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Services.ConfigApiService.html
  39. 737 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Services.IConfigApiService.html
  40. 133 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.Services.html
  41. 626 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.WebApiOptions.html
  42. 148 0
      docs/site/public/api-reference/api/Apq.Cfg.WebApi.html
  43. 102 0
      docs/site/public/api-reference/api/toc.html
  44. 0 0
      docs/site/public/api-reference/api/toc.json
  45. 0 0
      docs/site/public/api-reference/index.json
  46. 364 0
      docs/site/public/api-reference/manifest.json
  47. 2023 33
      docs/site/public/api-reference/xrefmap.yml

+ 12 - 0
Apq.Cfg.WebUI/.dockerignore

@@ -0,0 +1,12 @@
+bin/
+obj/
+wwwroot/
+ClientApp/node_modules/
+ClientApp/dist/
+*.user
+*.log
+.git/
+.vs/
+Dockerfile
+.dockerignore
+README.md

+ 8 - 8
Apq.Cfg.WebUI/Dockerfile

@@ -1,23 +1,23 @@
 # 构建前端
-FROM node:20-alpine AS frontend
-WORKDIR /app/ClientApp
+FROM node:24-alpine AS frontend
+WORKDIR /build
 COPY ClientApp/package*.json ./
-RUN npm ci
+RUN npm ci --silent
 COPY ClientApp/ ./
 RUN npm run build
 
 # 构建后端
-FROM mcr.microsoft.com/dotnet/sdk:8.0 AS backend
+FROM mcr.microsoft.com/dotnet/sdk:10.0 AS backend
 WORKDIR /src
 COPY *.csproj ./
 RUN dotnet restore
 COPY . ./
-COPY --from=frontend /app/wwwroot ./wwwroot
-RUN dotnet publish -c Release -o /app/publish
+COPY --from=frontend /wwwroot ./wwwroot
+RUN dotnet publish -c Release -o /app --no-restore
 
 # 运行时
-FROM mcr.microsoft.com/dotnet/aspnet:8.0
+FROM mcr.microsoft.com/dotnet/aspnet:10.0-alpine
 WORKDIR /app
-COPY --from=backend /app/publish ./
+COPY --from=backend /app ./
 EXPOSE 80
 ENTRYPOINT ["dotnet", "Apq.Cfg.WebUI.dll"]

+ 26 - 0
Apq.Cfg.WebUI/Dockerfile.cn

@@ -0,0 +1,26 @@
+# 国内构建版本 - 使用镜像加速
+ARG DOCKER_MIRROR=docker.m.daocloud.io
+
+# 构建前端
+FROM node:24-alpine AS frontend
+WORKDIR /build
+COPY ClientApp/package*.json ./
+RUN npm config set registry https://registry.npmmirror.com && npm ci --silent
+COPY ClientApp/ ./
+RUN npm run build
+
+# 构建后端
+FROM ${DOCKER_MIRROR}/mcr.microsoft.com/dotnet/sdk:10.0 AS backend
+WORKDIR /src
+COPY *.csproj ./
+RUN dotnet restore
+COPY . ./
+COPY --from=frontend /wwwroot ./wwwroot
+RUN dotnet publish -c Release -o /app --no-restore
+
+# 运行时
+FROM ${DOCKER_MIRROR}/mcr.microsoft.com/dotnet/aspnet:10.0-alpine
+WORKDIR /app
+COPY --from=backend /app ./
+EXPOSE 80
+ENTRYPOINT ["dotnet", "Apq.Cfg.WebUI.dll"]

+ 6 - 2
Apq.Cfg.WebUI/README.md

@@ -23,8 +23,12 @@ Apq.Cfg 配置管理 Web 界面,集中管理多个应用的配置。
 ### Docker
 
 ```bash
-docker build -t apq-cfg-webui .
-docker run -p 8080:80 apq-cfg-webui
+# 本地构建
+docker build -t apqcfg-webui .
+docker run -p 8080:80 apqcfg-webui
+
+# 或使用阿里云镜像
+docker run -p 8080:80 registry.cn-chengdu.aliyuncs.com/apq/apqcfg-webui
 ```
 
 ### 本地开发

+ 2 - 0
Apq.Cfg.WebUI/buildDockerImage_u24_docker.bat

@@ -0,0 +1,2 @@
+@echo off
+powershell -ExecutionPolicy Bypass -File "%~dp0buildDockerImage_u24_docker.ps1" %*

+ 155 - 0
Apq.Cfg.WebUI/buildDockerImage_u24_docker.ps1

@@ -0,0 +1,155 @@
+# Apq.Cfg.WebUI 远程构建 Docker 镜像脚本
+
+[Console]::OutputEncoding = [System.Text.Encoding]::UTF8
+
+# ============================================================
+# 配置区
+# ============================================================
+
+# 远程服务器配置
+$remoteUser = "root"
+$remoteHost = "192.168.1.99"
+$remotePort = "22"
+
+# Git 仓库配置
+$repoUrl = "https://gitee.com/apq/Apq.Cfg"
+$repoDir = "Apq.Cfg"
+$projectDir = "Apq.Cfg.WebUI"
+
+# Docker 镜像配置
+$imageName = "registry.cn-chengdu.aliyuncs.com/apq/apqcfg-webui"
+
+# Docker 镜像加速源(随机选择一个)
+$dockerMirrors = @(
+    "docker.m.daocloud.io"
+    "hub.rat.dev"
+)
+
+# tmux 会话名
+$tmuxSession = "dbx"
+
+# ============================================================
+# 主程序
+# ============================================================
+
+Write-Host ""
+Write-Host "========================================" -ForegroundColor Cyan
+Write-Host "  Apq.Cfg.WebUI 远程构建 Docker 镜像" -ForegroundColor Cyan
+Write-Host "========================================" -ForegroundColor Cyan
+Write-Host ""
+
+# Docker 镜像标签:提示用户输入(默认包含 latest,-l 排除 latest)
+Write-Host "请输入 Docker 镜像标签 (多个用空格分隔,-l=排除latest,留空则仅推送 latest): " -ForegroundColor Magenta -NoNewline
+$imageTagInput = Read-Host
+
+$inputTags = @()
+$excludeLatest = $false
+
+if ($imageTagInput -ne "") {
+    $inputTags = $imageTagInput -split '\s+' | Where-Object { $_ -ne "" }
+    if ($inputTags -contains "-l") {
+        $excludeLatest = $true
+        $inputTags = $inputTags | Where-Object { $_ -ne "-l" }
+    }
+}
+
+# 构建最终标签列表
+if ($excludeLatest) {
+    $imageTags = $inputTags
+} else {
+    $imageTags = @("latest") + $inputTags | Select-Object -Unique
+}
+
+# 构建 -t 参数列表
+$tagParams = ($imageTags | ForEach-Object { "-t ${imageName}:$_" }) -join " "
+
+Write-Host "镜像标签: $($imageTags -join ', ')" -ForegroundColor Yellow
+Write-Host ""
+
+# 随机选择 Docker 镜像加速源
+$dockerMirror = $dockerMirrors | Get-Random
+Write-Host "Docker 镜像源: $dockerMirror" -ForegroundColor Yellow
+Write-Host ""
+
+# 支持命令行参数覆盖默认配置
+if ($args.Count -ge 1) { $remoteUser = $args[0] }
+if ($args.Count -ge 2) { $remoteHost = $args[1] }
+if ($args.Count -ge 3) { $remotePort = $args[2] }
+
+Write-Host "连接到: $remoteUser@$remoteHost`:$remotePort" -ForegroundColor Yellow
+Write-Host ""
+
+# ============================================================
+# 构建远程执行的 Shell 脚本
+# ============================================================
+
+# 生成远程脚本内容(写入临时文件执行,避免引号嵌套问题)
+$scriptContent = @"
+#!/bin/bash
+cd ~
+
+# 克隆或更新仓库
+if [ ! -d "$repoDir" ]; then
+    echo "目录不存在,正在克隆仓库..."
+    git clone $repoUrl
+else
+    echo "目录已存在,跳过克隆"
+fi
+
+cd $repoDir
+
+# 拉取最新代码
+echo "正在拉取最新代码..."
+git pull
+
+# 进入项目目录
+cd $projectDir
+
+# 构建并推送 Docker 镜像
+echo "正在构建并推送 Docker 镜像..."
+echo "使用 Docker 镜像源: $dockerMirror"
+docker buildx build -f Dockerfile.cn \
+    --build-arg DOCKER_MIRROR=$dockerMirror \
+    --platform linux/amd64,linux/arm64 \
+    $tagParams \
+    --cache-from type=local,src=`$HOME/.buildx-cache \
+    --cache-to type=local,dest=`$HOME/.buildx-cache,mode=max \
+    --push .
+"@
+
+# 将脚本内容转为 base64,避免特殊字符问题
+$scriptBase64 = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($scriptContent))
+
+# tmux 命令:解码并执行脚本
+$remoteCmd = "tmux has-session -t $tmuxSession 2>/dev/null || tmux new-session -d -s $tmuxSession; " +
+             "tmux send-keys -t $tmuxSession 'echo $scriptBase64 | base64 -d > /tmp/build_webui.sh && bash /tmp/build_webui.sh' Enter"
+
+# ============================================================
+# 执行远程命令
+# ============================================================
+
+Write-Host "正在发送命令到 tmux 会话: $tmuxSession" -ForegroundColor Yellow
+Write-Host ""
+
+& ssh -p $remotePort "$remoteUser@$remoteHost" $remoteCmd
+
+if ($LASTEXITCODE -eq 0) {
+    Write-Host ""
+    Write-Host "========================================" -ForegroundColor Green
+    Write-Host "  命令已发送到 tmux 会话: $tmuxSession" -ForegroundColor Green
+    Write-Host "========================================" -ForegroundColor Green
+    Write-Host ""
+    Write-Host "推送目标:" -ForegroundColor Yellow
+    foreach ($tag in $imageTags) {
+        Write-Host "  - ${imageName}:${tag}" -ForegroundColor Cyan
+    }
+    Write-Host ""
+    Write-Host "查看构建进度:" -ForegroundColor Yellow
+    Write-Host "  ssh -t -p $remotePort $remoteUser@$remoteHost `"tmux attach -t $tmuxSession`"" -ForegroundColor Cyan
+} else {
+    Write-Host ""
+    Write-Host "部署失败,请检查错误信息" -ForegroundColor Red
+}
+
+Write-Host ""
+Read-Host "按回车退出"

+ 2 - 1
buildTools/pack-release.ps1

@@ -107,7 +107,8 @@ $AllProjects = @(
     'Apq.Cfg.Crypto',
     'Apq.Cfg.Crypto.DataProtection',
     'Apq.Cfg.Crypto.Tool',
-    'Apq.Cfg.SourceGenerator'
+    'Apq.Cfg.SourceGenerator',
+    'Apq.Cfg.WebApi'
 )
 
 # 如果指定了项目,则只打包指定的项目

+ 162 - 4
docs/docfx/api/.manifest

@@ -19,12 +19,12 @@
   "Apq.Cfg.Apollo.CfgBuilderExtensions.AddApollo(Apq.Cfg.CfgBuilder,System.Action{Apq.Cfg.Apollo.ApolloCfgOptions},System.Int32,System.Boolean)": "Apq.Cfg.Apollo.CfgBuilderExtensions.yml",
   "Apq.Cfg.Apollo.CfgBuilderExtensions.AddApollo(Apq.Cfg.CfgBuilder,System.String,System.String,System.String[],System.Int32,System.Boolean)": "Apq.Cfg.Apollo.CfgBuilderExtensions.yml",
   "Apq.Cfg.CfgBuilder": "Apq.Cfg.CfgBuilder.yml",
-  "Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String)": "Apq.Cfg.CfgBuilder.yml",
-  "Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)": "Apq.Cfg.CfgBuilder.yml",
+  "Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String,System.String)": "Apq.Cfg.CfgBuilder.yml",
+  "Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)": "Apq.Cfg.CfgBuilder.yml",
   "Apq.Cfg.CfgBuilder.AddReadEncodingMapping(System.String,System.Text.Encoding,System.Int32)": "Apq.Cfg.CfgBuilder.yml",
   "Apq.Cfg.CfgBuilder.AddReadEncodingMappingRegex(System.String,System.Text.Encoding,System.Int32)": "Apq.Cfg.CfgBuilder.yml",
   "Apq.Cfg.CfgBuilder.AddReadEncodingMappingWildcard(System.String,System.Text.Encoding,System.Int32)": "Apq.Cfg.CfgBuilder.yml",
-  "Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource)": "Apq.Cfg.CfgBuilder.yml",
+  "Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource,System.String)": "Apq.Cfg.CfgBuilder.yml",
   "Apq.Cfg.CfgBuilder.AddValidation(System.Action{Apq.Cfg.Validation.ConfigValidationBuilder})": "Apq.Cfg.CfgBuilder.yml",
   "Apq.Cfg.CfgBuilder.AddValidator(Apq.Cfg.Validation.IConfigValidator)": "Apq.Cfg.CfgBuilder.yml",
   "Apq.Cfg.CfgBuilder.AddValueMasker(Apq.Cfg.Security.IValueMasker)": "Apq.Cfg.CfgBuilder.yml",
@@ -341,8 +341,11 @@
   "Apq.Cfg.ICfgRoot.GetMany``1(System.Collections.Generic.IEnumerable{System.String})": "Apq.Cfg.ICfgRoot.yml",
   "Apq.Cfg.ICfgRoot.GetMany``1(System.Collections.Generic.IEnumerable{System.String},System.Action{System.String,``0})": "Apq.Cfg.ICfgRoot.yml",
   "Apq.Cfg.ICfgRoot.GetSection(System.String)": "Apq.Cfg.ICfgRoot.yml",
+  "Apq.Cfg.ICfgRoot.GetSource(System.Int32,System.String)": "Apq.Cfg.ICfgRoot.yml",
+  "Apq.Cfg.ICfgRoot.GetSources": "Apq.Cfg.ICfgRoot.yml",
   "Apq.Cfg.ICfgRoot.GetValue``1(System.String)": "Apq.Cfg.ICfgRoot.yml",
   "Apq.Cfg.ICfgRoot.Item(System.String)": "Apq.Cfg.ICfgRoot.yml",
+  "Apq.Cfg.ICfgRoot.Reload": "Apq.Cfg.ICfgRoot.yml",
   "Apq.Cfg.ICfgRoot.Remove(System.String,System.Nullable{System.Int32})": "Apq.Cfg.ICfgRoot.yml",
   "Apq.Cfg.ICfgRoot.SaveAsync(System.Nullable{System.Int32},System.Threading.CancellationToken)": "Apq.Cfg.ICfgRoot.yml",
   "Apq.Cfg.ICfgRoot.SetManyValues(System.Collections.Generic.IEnumerable{System.Collections.Generic.KeyValuePair{System.String,System.String}},System.Nullable{System.Int32})": "Apq.Cfg.ICfgRoot.yml",
@@ -463,9 +466,19 @@
   "Apq.Cfg.SourceGenerator.CfgSectionGenerator": "Apq.Cfg.SourceGenerator.CfgSectionGenerator.yml",
   "Apq.Cfg.SourceGenerator.CfgSectionGenerator.Initialize(Microsoft.CodeAnalysis.IncrementalGeneratorInitializationContext)": "Apq.Cfg.SourceGenerator.CfgSectionGenerator.yml",
   "Apq.Cfg.Sources": "Apq.Cfg.Sources.yml",
+  "Apq.Cfg.Sources.CfgSourceExtensions": "Apq.Cfg.Sources.CfgSourceExtensions.yml",
+  "Apq.Cfg.Sources.CfgSourceExtensions.ToInfo(Apq.Cfg.Sources.ICfgSource)": "Apq.Cfg.Sources.CfgSourceExtensions.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo.KeyCount": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo.Level": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo.Name": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
+  "Apq.Cfg.Sources.ConfigSourceInfo.Type": "Apq.Cfg.Sources.ConfigSourceInfo.yml",
   "Apq.Cfg.Sources.File": "Apq.Cfg.Sources.File.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
-  "Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
+  "Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.BuildSource": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.CreatePhysicalFileProvider(System.String)": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.DetectEncodingEnhanced(System.String)": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
@@ -474,19 +487,32 @@
   "Apq.Cfg.Sources.File.FileCfgSourceBase.EncodingDetector": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.EncodingOptionsValue": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.EnsureDirectoryFor(System.String)": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
+  "Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
+  "Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.GetWriteEncoding": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.IsPrimaryWriter": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.IsWriteable": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
+  "Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase.Level": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
+  "Apq.Cfg.Sources.File.FileCfgSourceBase.Name": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
+  "Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
+  "Apq.Cfg.Sources.File.FileCfgSourceBase.Type": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase._encodingOptions": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase._optional": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase._path": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.File.FileCfgSourceBase._reloadOnChange": "Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
   "Apq.Cfg.Sources.ICfgSource": "Apq.Cfg.Sources.ICfgSource.yml",
   "Apq.Cfg.Sources.ICfgSource.BuildSource": "Apq.Cfg.Sources.ICfgSource.yml",
+  "Apq.Cfg.Sources.ICfgSource.GetAllValues": "Apq.Cfg.Sources.ICfgSource.yml",
   "Apq.Cfg.Sources.ICfgSource.IsPrimaryWriter": "Apq.Cfg.Sources.ICfgSource.yml",
   "Apq.Cfg.Sources.ICfgSource.IsWriteable": "Apq.Cfg.Sources.ICfgSource.yml",
+  "Apq.Cfg.Sources.ICfgSource.KeyCount": "Apq.Cfg.Sources.ICfgSource.yml",
   "Apq.Cfg.Sources.ICfgSource.Level": "Apq.Cfg.Sources.ICfgSource.yml",
+  "Apq.Cfg.Sources.ICfgSource.Name": "Apq.Cfg.Sources.ICfgSource.yml",
+  "Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount": "Apq.Cfg.Sources.ICfgSource.yml",
+  "Apq.Cfg.Sources.ICfgSource.Type": "Apq.Cfg.Sources.ICfgSource.yml",
+  "Apq.Cfg.Sources.IFileCfgSource": "Apq.Cfg.Sources.IFileCfgSource.yml",
+  "Apq.Cfg.Sources.IFileCfgSource.FilePath": "Apq.Cfg.Sources.IFileCfgSource.yml",
   "Apq.Cfg.Sources.IWritableCfgSource": "Apq.Cfg.Sources.IWritableCfgSource.yml",
   "Apq.Cfg.Sources.IWritableCfgSource.ApplyChangesAsync(System.Collections.Generic.IReadOnlyDictionary{System.String,System.String},System.Threading.CancellationToken)": "Apq.Cfg.Sources.IWritableCfgSource.yml",
   "Apq.Cfg.Template": "Apq.Cfg.Template.yml",
@@ -666,6 +692,138 @@
   "Apq.Cfg.Vault.VaultCfgOptions.RoleSecret": "Apq.Cfg.Vault.VaultCfgOptions.yml",
   "Apq.Cfg.Vault.VaultCfgOptions.Token": "Apq.Cfg.Vault.VaultCfgOptions.yml",
   "Apq.Cfg.Vault.VaultCfgOptions.Username": "Apq.Cfg.Vault.VaultCfgOptions.yml",
+  "Apq.Cfg.WebApi": "Apq.Cfg.WebApi.yml",
+  "Apq.Cfg.WebApi.ApplicationBuilderExtensions": "Apq.Cfg.WebApi.ApplicationBuilderExtensions.yml",
+  "Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi(Microsoft.AspNetCore.Routing.IEndpointRouteBuilder)": "Apq.Cfg.WebApi.ApplicationBuilderExtensions.yml",
+  "Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi(Microsoft.AspNetCore.Builder.IApplicationBuilder)": "Apq.Cfg.WebApi.ApplicationBuilderExtensions.yml",
+  "Apq.Cfg.WebApi.Authentication": "Apq.Cfg.WebApi.Authentication.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.#ctor(Microsoft.Extensions.Options.IOptionsMonitor{Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions},Microsoft.Extensions.Logging.ILoggerFactory,System.Text.Encodings.Web.UrlEncoder)": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyDefaults": "Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.yml",
+  "Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.AuthenticationScheme": "Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.yml",
+  "Apq.Cfg.WebApi.AuthenticationType": "Apq.Cfg.WebApi.AuthenticationType.yml",
+  "Apq.Cfg.WebApi.AuthenticationType.ApiKey": "Apq.Cfg.WebApi.AuthenticationType.yml",
+  "Apq.Cfg.WebApi.AuthenticationType.JwtBearer": "Apq.Cfg.WebApi.AuthenticationType.yml",
+  "Apq.Cfg.WebApi.AuthenticationType.None": "Apq.Cfg.WebApi.AuthenticationType.yml",
+  "Apq.Cfg.WebApi.Controllers": "Apq.Cfg.WebApi.Controllers.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.#ctor(Apq.Cfg.WebApi.Services.IConfigApiService,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey(System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey(System.Int32,System.String,System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.Export(System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource(System.Int32,System.String,System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection(System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue(System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig(System.Int32,System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree(System.Int32,System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue(System.Int32,System.String,System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.GetSources": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.Reload": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.Save": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue(System.Int32,System.String,System.String,System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.Controllers.ConfigController.SetValue(System.String,System.String)": "Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+  "Apq.Cfg.WebApi.JwtOptions": "Apq.Cfg.WebApi.JwtOptions.yml",
+  "Apq.Cfg.WebApi.JwtOptions.Audience": "Apq.Cfg.WebApi.JwtOptions.yml",
+  "Apq.Cfg.WebApi.JwtOptions.Authority": "Apq.Cfg.WebApi.JwtOptions.yml",
+  "Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata": "Apq.Cfg.WebApi.JwtOptions.yml",
+  "Apq.Cfg.WebApi.JwtOptions.ValidateAudience": "Apq.Cfg.WebApi.JwtOptions.yml",
+  "Apq.Cfg.WebApi.JwtOptions.ValidateIssuer": "Apq.Cfg.WebApi.JwtOptions.yml",
+  "Apq.Cfg.WebApi.Middleware": "Apq.Cfg.WebApi.Middleware.yml",
+  "Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware": "Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.yml",
+  "Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.#ctor(Microsoft.AspNetCore.Http.RequestDelegate,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})": "Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.yml",
+  "Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync(Microsoft.AspNetCore.Http.HttpContext)": "Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.yml",
+  "Apq.Cfg.WebApi.Models": "Apq.Cfg.WebApi.Models.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse": "Apq.Cfg.WebApi.Models.ApiResponse.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse.Error": "Apq.Cfg.WebApi.Models.ApiResponse.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode": "Apq.Cfg.WebApi.Models.ApiResponse.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse.Fail(System.String,System.String)": "Apq.Cfg.WebApi.Models.ApiResponse.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse.Ok": "Apq.Cfg.WebApi.Models.ApiResponse.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse.Success": "Apq.Cfg.WebApi.Models.ApiResponse.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse`1": "Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse`1.Data": "Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse`1.Error": "Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse`1.ErrorCode": "Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse`1.Fail(System.String,System.String)": "Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse`1.Ok(`0)": "Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+  "Apq.Cfg.WebApi.Models.ApiResponse`1.Success": "Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+  "Apq.Cfg.WebApi.Models.BatchUpdateRequest": "Apq.Cfg.WebApi.Models.BatchUpdateRequest.yml",
+  "Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel": "Apq.Cfg.WebApi.Models.BatchUpdateRequest.yml",
+  "Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName": "Apq.Cfg.WebApi.Models.BatchUpdateRequest.yml",
+  "Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values": "Apq.Cfg.WebApi.Models.BatchUpdateRequest.yml",
+  "Apq.Cfg.WebApi.Models.ConfigTreeNode": "Apq.Cfg.WebApi.Models.ConfigTreeNode.yml",
+  "Apq.Cfg.WebApi.Models.ConfigTreeNode.Children": "Apq.Cfg.WebApi.Models.ConfigTreeNode.yml",
+  "Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue": "Apq.Cfg.WebApi.Models.ConfigTreeNode.yml",
+  "Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked": "Apq.Cfg.WebApi.Models.ConfigTreeNode.yml",
+  "Apq.Cfg.WebApi.Models.ConfigTreeNode.Key": "Apq.Cfg.WebApi.Models.ConfigTreeNode.yml",
+  "Apq.Cfg.WebApi.Models.ConfigTreeNode.Value": "Apq.Cfg.WebApi.Models.ConfigTreeNode.yml",
+  "Apq.Cfg.WebApi.Models.ConfigValueResponse": "Apq.Cfg.WebApi.Models.ConfigValueResponse.yml",
+  "Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists": "Apq.Cfg.WebApi.Models.ConfigValueResponse.yml",
+  "Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked": "Apq.Cfg.WebApi.Models.ConfigValueResponse.yml",
+  "Apq.Cfg.WebApi.Models.ConfigValueResponse.Key": "Apq.Cfg.WebApi.Models.ConfigValueResponse.yml",
+  "Apq.Cfg.WebApi.Models.ConfigValueResponse.Value": "Apq.Cfg.WebApi.Models.ConfigValueResponse.yml",
+  "Apq.Cfg.WebApi.ServiceCollectionExtensions": "Apq.Cfg.WebApi.ServiceCollectionExtensions.yml",
+  "Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration,System.Action{Apq.Cfg.WebApi.WebApiOptions})": "Apq.Cfg.WebApi.ServiceCollectionExtensions.yml",
+  "Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{Apq.Cfg.WebApi.WebApiOptions})": "Apq.Cfg.WebApi.ServiceCollectionExtensions.yml",
+  "Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)": "Apq.Cfg.WebApi.ServiceCollectionExtensions.yml",
+  "Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)": "Apq.Cfg.WebApi.ServiceCollectionExtensions.yml",
+  "Apq.Cfg.WebApi.Services": "Apq.Cfg.WebApi.Services.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.#ctor(Apq.Cfg.ICfgRoot,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey(System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection(System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue(System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig(System.Int32,System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree(System.Int32,System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue(System.Int32,System.String,System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.GetSources": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.Reload": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.ConfigApiService.SetValue(System.String,System.String)": "Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey(System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection(System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue(System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig(System.Int32,System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree(System.Int32,System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue(System.Int32,System.String,System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.GetSources": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.Reload": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.Services.IConfigApiService.SetValue(System.String,System.String)": "Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+  "Apq.Cfg.WebApi.WebApiOptions": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.AllowDelete": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.AllowRead": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.AllowWrite": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.ApiKey": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.Authentication": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.CorsOrigins": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.EnableCors": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.Enabled": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.Jwt": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.RoutePrefix": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.SectionName": "Apq.Cfg.WebApi.WebApiOptions.yml",
+  "Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns": "Apq.Cfg.WebApi.WebApiOptions.yml",
   "Apq.Cfg.Xml": "Apq.Cfg.Xml.yml",
   "Apq.Cfg.Xml.CfgBuilderExtensions": "Apq.Cfg.Xml.CfgBuilderExtensions.yml",
   "Apq.Cfg.Xml.CfgBuilderExtensions.AddXml(Apq.Cfg.CfgBuilder,System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean)": "Apq.Cfg.Xml.CfgBuilderExtensions.yml",

+ 2 - 1
docs/docfx/docfx.json

@@ -22,7 +22,8 @@
             "Apq.Cfg.Apollo/Apq.Cfg.Apollo.csproj",
             "Apq.Cfg.Zookeeper/Apq.Cfg.Zookeeper.csproj",
             "Apq.Cfg.Vault/Apq.Cfg.Vault.csproj",
-            "Apq.Cfg.SourceGenerator/Apq.Cfg.SourceGenerator.csproj"
+            "Apq.Cfg.SourceGenerator/Apq.Cfg.SourceGenerator.csproj",
+            "Apq.Cfg.WebApi/Apq.Cfg.WebApi.csproj"
           ],
           "src": "../.."
         }

+ 2 - 0
docs/site/index.md

@@ -110,5 +110,7 @@ var dbConfig = cfg.GetSection("Database").GetValue<DatabaseConfig>();
 | Data Protection | ASP.NET Core Data Protection 集成 | Apq.Cfg.Crypto.DataProtection |
 | 加密工具 | 命令行加密工具 (dotnet tool) | Apq.Cfg.Crypto.Tool |
 | 源生成器 | 编译时生成零反射绑定代码,支持 Native AOT | Apq.Cfg.SourceGenerator |
+| Web API | RESTful API 接口,支持远程配置管理 | Apq.Cfg.WebApi |
+| Web 管理界面 | 集中管理多个应用的配置 | Apq.Cfg.WebUI |
 
 </div>

+ 21 - 12
docs/site/public/api-reference/api/Apq.Cfg.CfgBuilder.html

@@ -255,8 +255,8 @@ Class CfgBuilder
 
   <a id="Apq_Cfg_CfgBuilder_AddEnvironmentVariables_" data-uid="Apq.Cfg.CfgBuilder.AddEnvironmentVariables*"></a>
 
-  <h3 id="Apq_Cfg_CfgBuilder_AddEnvironmentVariables_System_Int32_System_String_" data-uid="Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String)">
-  AddEnvironmentVariables(int, string?)
+  <h3 id="Apq_Cfg_CfgBuilder_AddEnvironmentVariables_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String,System.String)">
+  AddEnvironmentVariables(int, string?, string?)
   
   </h3>
 
@@ -265,7 +265,7 @@ Class CfgBuilder
   <div class="markdown level1 conceptual"></div>
 
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public CfgBuilder AddEnvironmentVariables(int level = 400, string? prefix = null)</code></pre>
+    <pre><code class="lang-csharp hljs">public CfgBuilder AddEnvironmentVariables(int level = 400, string? prefix = null, string? name = null)</code></pre>
   </div>
 
   <h4 class="section">Parameters</h4>
@@ -275,6 +275,9 @@ Class CfgBuilder
 </dd>
     <dt><code>prefix</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
     <dd><p>环境变量前缀,为null时加载所有环境变量</p>
+</dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd><p>配置源名称,为 null 时自动生成</p>
 </dd>
   </dl>
 
@@ -290,7 +293,7 @@ Class CfgBuilder
 
 
 
-  <h4 class="section" id="Apq_Cfg_CfgBuilder_AddEnvironmentVariables_System_Int32_System_String__examples">Examples</h4>
+  <h4 class="section" id="Apq_Cfg_CfgBuilder_AddEnvironmentVariables_System_Int32_System_String_System_String__examples">Examples</h4>
   <pre><code class="lang-csharp">var cfg = new CfgBuilder()
     .AddJson("config.json")
     .AddEnvironmentVariables(prefix: "APP_")  // 使用默认层级 20
@@ -303,8 +306,8 @@ Class CfgBuilder
 
   <a id="Apq_Cfg_CfgBuilder_AddJson_" data-uid="Apq.Cfg.CfgBuilder.AddJson*"></a>
 
-  <h3 id="Apq_Cfg_CfgBuilder_AddJson_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_" data-uid="Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)">
-  AddJson(string, int, bool, bool, bool, bool, EncodingOptions?)
+  <h3 id="Apq_Cfg_CfgBuilder_AddJson_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_System_String_" data-uid="Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)">
+  AddJson(string, int, bool, bool, bool, bool, EncodingOptions?, string?)
   
   </h3>
 
@@ -313,7 +316,7 @@ Class CfgBuilder
   <div class="markdown level1 conceptual"></div>
 
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public CfgBuilder AddJson(string path, int level = 0, bool writeable = false, bool optional = true, bool reloadOnChange = true, bool isPrimaryWriter = false, EncodingOptions? encoding = null)</code></pre>
+    <pre><code class="lang-csharp hljs">public CfgBuilder AddJson(string path, int level = 0, bool writeable = false, bool optional = true, bool reloadOnChange = true, bool isPrimaryWriter = false, EncodingOptions? encoding = null, string? name = null)</code></pre>
   </div>
 
   <h4 class="section">Parameters</h4>
@@ -338,6 +341,9 @@ Class CfgBuilder
 </dd>
     <dt><code>encoding</code> <a class="xref" href="Apq.Cfg.EncodingSupport.EncodingOptions.html">EncodingOptions</a></dt>
     <dd><p>编码选项,默认为null</p>
+</dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd><p>配置源名称,为 null 时使用文件名</p>
 </dd>
   </dl>
 
@@ -353,7 +359,7 @@ Class CfgBuilder
 
 
 
-  <h4 class="section" id="Apq_Cfg_CfgBuilder_AddJson_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions__examples">Examples</h4>
+  <h4 class="section" id="Apq_Cfg_CfgBuilder_AddJson_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_System_String__examples">Examples</h4>
   <pre><code class="lang-csharp">var cfg = new CfgBuilder()
     .AddJson("config.json")  // 使用默认层级 0
     .AddJson("config.local.json", level: 5, writeable: true, isPrimaryWriter: true)
@@ -498,8 +504,8 @@ Class CfgBuilder
 
   <a id="Apq_Cfg_CfgBuilder_AddSource_" data-uid="Apq.Cfg.CfgBuilder.AddSource*"></a>
 
-  <h3 id="Apq_Cfg_CfgBuilder_AddSource_Apq_Cfg_Sources_ICfgSource_" data-uid="Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource)">
-  AddSource(ICfgSource)
+  <h3 id="Apq_Cfg_CfgBuilder_AddSource_Apq_Cfg_Sources_ICfgSource_System_String_" data-uid="Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource,System.String)">
+  AddSource(ICfgSource, string?)
   
   </h3>
 
@@ -508,13 +514,16 @@ Class CfgBuilder
   <div class="markdown level1 conceptual"></div>
 
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">public CfgBuilder AddSource(ICfgSource source)</code></pre>
+    <pre><code class="lang-csharp hljs">public CfgBuilder AddSource(ICfgSource source, string? name = null)</code></pre>
   </div>
 
   <h4 class="section">Parameters</h4>
   <dl class="parameters">
     <dt><code>source</code> <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html">ICfgSource</a></dt>
     <dd><p>配置源实例,实现 ICfgSource 接口</p>
+</dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd><p>配置源名称,为 null 时使用配置源自身的 Name 属性</p>
 </dd>
   </dl>
 
@@ -530,7 +539,7 @@ Class CfgBuilder
 
 
 
-  <h4 class="section" id="Apq_Cfg_CfgBuilder_AddSource_Apq_Cfg_Sources_ICfgSource__examples">Examples</h4>
+  <h4 class="section" id="Apq_Cfg_CfgBuilder_AddSource_Apq_Cfg_Sources_ICfgSource_System_String__examples">Examples</h4>
   <pre><code class="lang-csharp">// 添加自定义配置源
 var customSource = new CustomCfgSource();
 var cfg = new CfgBuilder()

+ 120 - 0
docs/site/public/api-reference/api/Apq.Cfg.ICfgRoot.html

@@ -587,6 +587,95 @@ cfg["App:Name"] = "NewName";</code></pre>
 
 
 
+  <a id="Apq_Cfg_ICfgRoot_GetSource_" data-uid="Apq.Cfg.ICfgRoot.GetSource*"></a>
+
+  <h3 id="Apq_Cfg_ICfgRoot_GetSource_System_Int32_System_String_" data-uid="Apq.Cfg.ICfgRoot.GetSource(System.Int32,System.String)">
+  GetSource(int, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>根据层级和名称获取配置源</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">ICfgSource? GetSource(int level, string name)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd><p>配置源层级</p>
+</dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd><p>配置源名称</p>
+</dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.Sources.ICfgSource.html">ICfgSource</a></dt>
+    <dd><p>配置源实例,不存在时返回 null</p>
+</dd>
+  </dl>
+
+
+
+
+
+
+  <h4 class="section" id="Apq_Cfg_ICfgRoot_GetSource_System_Int32_System_String__examples">Examples</h4>
+  <pre><code class="lang-csharp">var source = cfg.GetSource(5, "config.local.json");
+if (source != null)
+{
+    var values = source.GetAllValues();
+}</code></pre>
+
+
+
+
+
+
+  <a id="Apq_Cfg_ICfgRoot_GetSources_" data-uid="Apq.Cfg.ICfgRoot.GetSources*"></a>
+
+  <h3 id="Apq_Cfg_ICfgRoot_GetSources" data-uid="Apq.Cfg.ICfgRoot.GetSources">
+  GetSources()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取所有配置源列表</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">IReadOnlyList&lt;ICfgSource&gt; GetSources()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ireadonlylist-1">IReadOnlyList</a>&lt;<a class="xref" href="Apq.Cfg.Sources.ICfgSource.html">ICfgSource</a>&gt;</dt>
+    <dd><p>配置源列表,按层级升序排列</p>
+</dd>
+  </dl>
+
+
+
+
+
+
+  <h4 class="section" id="Apq_Cfg_ICfgRoot_GetSources_examples">Examples</h4>
+  <pre><code class="lang-csharp">var sources = cfg.GetSources();
+foreach (var source in sources)
+{
+    Console.WriteLine($"[{source.Level}] {source.Name} ({source.Type})");
+}</code></pre>
+
+
+
+
+
+
   <a id="Apq_Cfg_ICfgRoot_GetValue_" data-uid="Apq.Cfg.ICfgRoot.GetValue*"></a>
 
   <h3 id="Apq_Cfg_ICfgRoot_GetValue__1_System_String_" data-uid="Apq.Cfg.ICfgRoot.GetValue``1(System.String)">
@@ -636,6 +725,37 @@ var enabled = cfg.GetValue&lt;bool&gt;("Features:NewUI");</code></pre>
 
 
 
+  <a id="Apq_Cfg_ICfgRoot_Reload_" data-uid="Apq.Cfg.ICfgRoot.Reload*"></a>
+
+  <h3 id="Apq_Cfg_ICfgRoot_Reload" data-uid="Apq.Cfg.ICfgRoot.Reload">
+  Reload()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>手动触发配置重载</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">void Reload()</code></pre>
+  </div>
+
+
+
+
+
+
+
+
+
+  <h4 class="section" id="Apq_Cfg_ICfgRoot_Reload_remarks">Remarks</h4>
+  <div class="markdown level1 remarks"><p>对于 Manual 和 Lazy 策略,此方法会立即检查所有配置源并应用更改。
+对于 Automatic 策略,此方法不会产生额外效果,因为配置会自动重载。</p>
+</div>
+
+
+
+
   <a id="Apq_Cfg_ICfgRoot_Remove_" data-uid="Apq.Cfg.ICfgRoot.Remove*"></a>
 
   <h3 id="Apq_Cfg_ICfgRoot_Remove_System_String_System_Nullable_System_Int32__" data-uid="Apq.Cfg.ICfgRoot.Remove(System.String,System.Nullable{System.Int32})">

+ 215 - 0
docs/site/public/api-reference/api/Apq.Cfg.Sources.CfgSourceExtensions.html

@@ -0,0 +1,215 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class CfgSourceExtensions | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class CfgSourceExtensions | Apq.Cfg API ">
+      
+      <meta name="description" content="ICfgSource 扩展方法">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.Sources.CfgSourceExtensions">
+
+
+
+  <h1 id="Apq_Cfg_Sources_CfgSourceExtensions" data-uid="Apq.Cfg.Sources.CfgSourceExtensions" class="text-break">
+Class CfgSourceExtensions  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.Sources.html">Sources</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>ICfgSource 扩展方法</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static class CfgSourceExtensions</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">CfgSourceExtensions</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_" data-uid="Apq.Cfg.Sources.CfgSourceExtensions.ToInfo*"></a>
+
+  <h3 id="Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_Apq_Cfg_Sources_ICfgSource_" data-uid="Apq.Cfg.Sources.CfgSourceExtensions.ToInfo(Apq.Cfg.Sources.ICfgSource)">
+  ToInfo(ICfgSource)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>将配置源转换为可序列化的信息对象</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static ConfigSourceInfo ToInfo(this ICfgSource source)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>source</code> <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html">ICfgSource</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.Sources.ConfigSourceInfo.html">ConfigSourceInfo</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 399 - 0
docs/site/public/api-reference/api/Apq.Cfg.Sources.ConfigSourceInfo.html

@@ -0,0 +1,399 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ConfigSourceInfo | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ConfigSourceInfo | Apq.Cfg API ">
+      
+      <meta name="description" content="配置源信息(用于序列化和 API 响应)">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.Sources.ConfigSourceInfo">
+
+
+
+  <h1 id="Apq_Cfg_Sources_ConfigSourceInfo" data-uid="Apq.Cfg.Sources.ConfigSourceInfo" class="text-break">
+Class ConfigSourceInfo  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.Sources.html">Sources</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>配置源信息(用于序列化和 API 响应)</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class ConfigSourceInfo</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ConfigSourceInfo</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_Sources_ConfigSourceInfo_IsPrimaryWriter_" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ConfigSourceInfo_IsPrimaryWriter" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter">
+  IsPrimaryWriter
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否为主写入源</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool IsPrimaryWriter { get; init; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ConfigSourceInfo_IsWriteable_" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ConfigSourceInfo_IsWriteable" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable">
+  IsWriteable
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否可写</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool IsWriteable { get; init; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ConfigSourceInfo_KeyCount_" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.KeyCount*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ConfigSourceInfo_KeyCount" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.KeyCount">
+  KeyCount
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>配置项数量(所有叶子节点的总数)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int KeyCount { get; init; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ConfigSourceInfo_Level_" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.Level*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ConfigSourceInfo_Level" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.Level">
+  Level
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>配置源层级(优先级,数字越大优先级越高)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int Level { get; init; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ConfigSourceInfo_Name_" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.Name*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ConfigSourceInfo_Name" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.Name">
+  Name
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>配置源名称(同一层级内唯一)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Name { get; init; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ConfigSourceInfo_TopLevelKeyCount_" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ConfigSourceInfo_TopLevelKeyCount" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount">
+  TopLevelKeyCount
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>顶级配置键数量(只统计第一层节点)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int TopLevelKeyCount { get; init; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ConfigSourceInfo_Type_" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.Type*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ConfigSourceInfo_Type" data-uid="Apq.Cfg.Sources.ConfigSourceInfo.Type">
+  Type
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>配置源类型名称</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Type { get; init; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 205 - 3
docs/site/public/api-reference/api/Apq.Cfg.Sources.File.FileCfgSourceBase.html

@@ -151,6 +151,13 @@ Class FileCfgSourceBase
     </div>
   </dd></dl>
 
+  <dl class="typelist extensionMethods">
+    <dt>Extension Methods</dt>
+    <dd>
+  <div>
+      <a class="xref" href="Apq.Cfg.Sources.CfgSourceExtensions.html#Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_Apq_Cfg_Sources_ICfgSource_">CfgSourceExtensions.ToInfo(ICfgSource)</a>
+  </div>
+  </dd></dl>
 
 
 
@@ -162,8 +169,8 @@ Class FileCfgSourceBase
 
   <a id="Apq_Cfg_Sources_File_FileCfgSourceBase__ctor_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor*"></a>
 
-  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase__ctor_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)">
-  FileCfgSourceBase(string, int, bool, bool, bool, bool, EncodingOptions?)
+  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase__ctor_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_System_String_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)">
+  FileCfgSourceBase(string, int, bool, bool, bool, bool, EncodingOptions?, string?)
   
   </h3>
 
@@ -171,7 +178,7 @@ Class FileCfgSourceBase
   <div class="markdown level1 conceptual"></div>
 
   <div class="codewrapper">
-    <pre><code class="lang-csharp hljs">protected FileCfgSourceBase(string path, int level, bool writeable, bool optional, bool reloadOnChange, bool isPrimaryWriter, EncodingOptions? encodingOptions = null)</code></pre>
+    <pre><code class="lang-csharp hljs">protected FileCfgSourceBase(string path, int level, bool writeable, bool optional, bool reloadOnChange, bool isPrimaryWriter, EncodingOptions? encodingOptions = null, string? name = null)</code></pre>
   </div>
 
   <h4 class="section">Parameters</h4>
@@ -190,6 +197,8 @@ Class FileCfgSourceBase
     <dd></dd>
     <dt><code>encodingOptions</code> <a class="xref" href="Apq.Cfg.EncodingSupport.EncodingOptions.html">EncodingOptions</a></dt>
     <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
   </dl>
 
 
@@ -428,6 +437,38 @@ Class FileCfgSourceBase
 
 
 
+  <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_FilePath_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath*"></a>
+
+  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_FilePath" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath">
+  FilePath
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取文件路径</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string FilePath { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
   <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_IsPrimaryWriter_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.IsPrimaryWriter*"></a>
 
   <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_IsPrimaryWriter" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.IsPrimaryWriter">
@@ -492,6 +533,38 @@ Class FileCfgSourceBase
 
 
 
+  <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_KeyCount_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount*"></a>
+
+  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_KeyCount" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount">
+  KeyCount
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取配置项数量(所有叶子节点的总数)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int KeyCount { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
   <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_Level_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.Level*"></a>
 
   <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_Level" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.Level">
@@ -524,6 +597,102 @@ Class FileCfgSourceBase
 
 
 
+  <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_Name_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.Name*"></a>
+
+  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_Name" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.Name">
+  Name
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取或设置配置源名称(同一层级内唯一)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Name { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_TopLevelKeyCount_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount*"></a>
+
+  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_TopLevelKeyCount" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount">
+  TopLevelKeyCount
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取顶级配置键数量(只统计第一层节点)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int TopLevelKeyCount { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_Type_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.Type*"></a>
+
+  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_Type" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.Type">
+  Type
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取配置源类型名称</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public virtual string Type { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
   <h2 class="section" id="methods">Methods
 </h2>
 
@@ -693,6 +862,39 @@ Class FileCfgSourceBase
 
 
 
+  <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_GetAllValues_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues*"></a>
+
+  <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_GetAllValues" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues">
+  GetAllValues()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取该配置源的所有配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public abstract IEnumerable&lt;KeyValuePair&lt;string, string?&gt;&gt; GetAllValues()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1">IEnumerable</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.keyvaluepair-2">KeyValuePair</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;&gt;</dt>
+    <dd><p>配置键值对集合</p>
+</dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
   <a id="Apq_Cfg_Sources_File_FileCfgSourceBase_GetWriteEncoding_" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.GetWriteEncoding*"></a>
 
   <h3 id="Apq_Cfg_Sources_File_FileCfgSourceBase_GetWriteEncoding" data-uid="Apq.Cfg.Sources.File.FileCfgSourceBase.GetWriteEncoding">

+ 168 - 0
docs/site/public/api-reference/api/Apq.Cfg.Sources.ICfgSource.html

@@ -112,6 +112,13 @@ Interface ICfgSource
 
 
 
+  <dl class="typelist extensionMethods">
+    <dt>Extension Methods</dt>
+    <dd>
+  <div>
+      <a class="xref" href="Apq.Cfg.Sources.CfgSourceExtensions.html#Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_Apq_Cfg_Sources_ICfgSource_">CfgSourceExtensions.ToInfo(ICfgSource)</a>
+  </div>
+  </dd></dl>
 
 
 
@@ -185,6 +192,38 @@ Interface ICfgSource
 
 
 
+  <a id="Apq_Cfg_Sources_ICfgSource_KeyCount_" data-uid="Apq.Cfg.Sources.ICfgSource.KeyCount*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ICfgSource_KeyCount" data-uid="Apq.Cfg.Sources.ICfgSource.KeyCount">
+  KeyCount
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取配置项数量(所有叶子节点的总数)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">int KeyCount { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
   <a id="Apq_Cfg_Sources_ICfgSource_Level_" data-uid="Apq.Cfg.Sources.ICfgSource.Level*"></a>
 
   <h3 id="Apq_Cfg_Sources_ICfgSource_Level" data-uid="Apq.Cfg.Sources.ICfgSource.Level">
@@ -217,6 +256,102 @@ Interface ICfgSource
 
 
 
+  <a id="Apq_Cfg_Sources_ICfgSource_Name_" data-uid="Apq.Cfg.Sources.ICfgSource.Name*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ICfgSource_Name" data-uid="Apq.Cfg.Sources.ICfgSource.Name">
+  Name
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取或设置配置源名称(同一层级内唯一)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">string Name { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ICfgSource_TopLevelKeyCount_" data-uid="Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ICfgSource_TopLevelKeyCount" data-uid="Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount">
+  TopLevelKeyCount
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取顶级配置键数量(只统计第一层节点)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">int TopLevelKeyCount { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_Sources_ICfgSource_Type_" data-uid="Apq.Cfg.Sources.ICfgSource.Type*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ICfgSource_Type" data-uid="Apq.Cfg.Sources.ICfgSource.Type">
+  Type
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取配置源类型名称</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">string Type { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
   <h2 class="section" id="methods">Methods
 </h2>
 
@@ -254,6 +389,39 @@ Interface ICfgSource
 
 
 
+  <a id="Apq_Cfg_Sources_ICfgSource_GetAllValues_" data-uid="Apq.Cfg.Sources.ICfgSource.GetAllValues*"></a>
+
+  <h3 id="Apq_Cfg_Sources_ICfgSource_GetAllValues" data-uid="Apq.Cfg.Sources.ICfgSource.GetAllValues">
+  GetAllValues()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取该配置源的所有配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">IEnumerable&lt;KeyValuePair&lt;string, string?&gt;&gt; GetAllValues()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.ienumerable-1">IEnumerable</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.keyvaluepair-2">KeyValuePair</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;&gt;</dt>
+    <dd><p>配置键值对集合</p>
+</dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
 
 </article>
 

+ 216 - 0
docs/site/public/api-reference/api/Apq.Cfg.Sources.IFileCfgSource.html

@@ -0,0 +1,216 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Interface IFileCfgSource | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Interface IFileCfgSource | Apq.Cfg API ">
+      
+      <meta name="description" content="文件配置源接口,用于标识基于文件的配置源">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.Sources.IFileCfgSource">
+
+
+
+  <h1 id="Apq_Cfg_Sources_IFileCfgSource" data-uid="Apq.Cfg.Sources.IFileCfgSource" class="text-break">
+Interface IFileCfgSource  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.Sources.html">Sources</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>文件配置源接口,用于标识基于文件的配置源</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public interface IFileCfgSource : ICfgSource</code></pre>
+  </div>
+
+
+
+
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Name">ICfgSource.Name</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Level">ICfgSource.Level</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Type">ICfgSource.Type</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_IsWriteable">ICfgSource.IsWriteable</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_IsPrimaryWriter">ICfgSource.IsPrimaryWriter</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_KeyCount">ICfgSource.KeyCount</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_TopLevelKeyCount">ICfgSource.TopLevelKeyCount</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_BuildSource">ICfgSource.BuildSource()</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_GetAllValues">ICfgSource.GetAllValues()</a>
+    </div>
+  </dd></dl>
+
+  <dl class="typelist extensionMethods">
+    <dt>Extension Methods</dt>
+    <dd>
+  <div>
+      <a class="xref" href="Apq.Cfg.Sources.CfgSourceExtensions.html#Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_Apq_Cfg_Sources_ICfgSource_">CfgSourceExtensions.ToInfo(ICfgSource)</a>
+  </div>
+  </dd></dl>
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_Sources_IFileCfgSource_FilePath_" data-uid="Apq.Cfg.Sources.IFileCfgSource.FilePath*"></a>
+
+  <h3 id="Apq_Cfg_Sources_IFileCfgSource_FilePath" data-uid="Apq.Cfg.Sources.IFileCfgSource.FilePath">
+  FilePath
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取文件路径</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">string FilePath { get; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 22 - 0
docs/site/public/api-reference/api/Apq.Cfg.Sources.IWritableCfgSource.html

@@ -114,20 +114,42 @@ Interface IWritableCfgSource
   <dl class="typelist inheritedMembers">
     <dt>Inherited Members</dt>
     <dd>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Name">ICfgSource.Name</a>
+    </div>
     <div>
       <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Level">ICfgSource.Level</a>
     </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Type">ICfgSource.Type</a>
+    </div>
     <div>
       <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_IsWriteable">ICfgSource.IsWriteable</a>
     </div>
     <div>
       <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_IsPrimaryWriter">ICfgSource.IsPrimaryWriter</a>
     </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_KeyCount">ICfgSource.KeyCount</a>
+    </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_TopLevelKeyCount">ICfgSource.TopLevelKeyCount</a>
+    </div>
     <div>
       <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_BuildSource">ICfgSource.BuildSource()</a>
     </div>
+    <div>
+      <a class="xref" href="Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_GetAllValues">ICfgSource.GetAllValues()</a>
+    </div>
   </dd></dl>
 
+  <dl class="typelist extensionMethods">
+    <dt>Extension Methods</dt>
+    <dd>
+  <div>
+      <a class="xref" href="Apq.Cfg.Sources.CfgSourceExtensions.html#Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_Apq_Cfg_Sources_ICfgSource_">CfgSourceExtensions.ToInfo(ICfgSource)</a>
+  </div>
+  </dd></dl>
 
 
 

+ 18 - 0
docs/site/public/api-reference/api/Apq.Cfg.Sources.html

@@ -91,12 +91,30 @@
   <div class="markdown level0 conceptual"></div>
   <div class="markdown level0 remarks"></div>
 
+    <h3 id="classes">
+Classes
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.Sources.CfgSourceExtensions.html">CfgSourceExtensions</a></dt>
+      <dd><p>ICfgSource 扩展方法</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.Sources.ConfigSourceInfo.html">ConfigSourceInfo</a></dt>
+      <dd><p>配置源信息(用于序列化和 API 响应)</p>
+</dd>
+    </dl>
     <h3 id="interfaces">
 Interfaces
 </h3>
     <dl class="jumplist">
       <dt><a class="xref" href="Apq.Cfg.Sources.ICfgSource.html">ICfgSource</a></dt>
       <dd><p>配置源接口,定义了配置源的基本行为</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.Sources.IFileCfgSource.html">IFileCfgSource</a></dt>
+      <dd><p>文件配置源接口,用于标识基于文件的配置源</p>
 </dd>
     </dl>
     <dl class="jumplist">

+ 252 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html

@@ -0,0 +1,252 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ApplicationBuilderExtensions | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ApplicationBuilderExtensions | Apq.Cfg API ">
+      
+      <meta name="description" content="应用程序构建器扩展方法">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.ApplicationBuilderExtensions">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_ApplicationBuilderExtensions" data-uid="Apq.Cfg.WebApi.ApplicationBuilderExtensions" class="text-break">
+Class ApplicationBuilderExtensions  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>应用程序构建器扩展方法</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static class ApplicationBuilderExtensions</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ApplicationBuilderExtensions</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_ApplicationBuilderExtensions_MapApqCfgWebApi_" data-uid="Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_ApplicationBuilderExtensions_MapApqCfgWebApi_Microsoft_AspNetCore_Routing_IEndpointRouteBuilder_" data-uid="Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi(Microsoft.AspNetCore.Routing.IEndpointRouteBuilder)">
+  MapApqCfgWebApi(IEndpointRouteBuilder)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>映射 Apq.Cfg Web API 端点</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static IEndpointRouteBuilder MapApqCfgWebApi(this IEndpointRouteBuilder endpoints)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>endpoints</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.routing.iendpointroutebuilder">IEndpointRouteBuilder</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.routing.iendpointroutebuilder">IEndpointRouteBuilder</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_ApplicationBuilderExtensions_UseApqCfgWebApi_" data-uid="Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_ApplicationBuilderExtensions_UseApqCfgWebApi_Microsoft_AspNetCore_Builder_IApplicationBuilder_" data-uid="Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi(Microsoft.AspNetCore.Builder.IApplicationBuilder)">
+  UseApqCfgWebApi(IApplicationBuilder)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>使用 Apq.Cfg Web API</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static IApplicationBuilder UseApqCfgWebApi(this IApplicationBuilder app)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>app</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.builder.iapplicationbuilder">IApplicationBuilder</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.builder.iapplicationbuilder">IApplicationBuilder</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 341 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html

@@ -0,0 +1,341 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ApiKeyAuthenticationHandler | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ApiKeyAuthenticationHandler | Apq.Cfg API ">
+      
+      <meta name="description" content="API Key 认证处理器">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler" class="text-break">
+Class ApiKeyAuthenticationHandler  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Authentication.html">Authentication</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>API Key 认证处理器</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public class ApiKeyAuthenticationHandler : AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;, IAuthenticationHandler</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1">AuthenticationHandler</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html">ApiKeyAuthenticationOptions</a>&gt;</div>
+      <div><span class="xref">ApiKeyAuthenticationHandler</span></div>
+    </dd>
+  </dl>
+
+  <dl class="typelist implements">
+    <dt>Implements</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.iauthenticationhandler">IAuthenticationHandler</a></div>
+    </dd>
+  </dl>
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.initializeasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.InitializeAsync(AuthenticationScheme, HttpContext)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.initializeeventsasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.InitializeEventsAsync()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.createeventsasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.CreateEventsAsync()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.initializehandlerasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.InitializeHandlerAsync()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.buildredirecturi">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.BuildRedirectUri(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.resolvetarget">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.ResolveTarget(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.authenticateasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.AuthenticateAsync()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.handleauthenticateonceasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.HandleAuthenticateOnceAsync()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.handleauthenticateoncesafeasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.HandleAuthenticateOnceSafeAsync()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.handleforbiddenasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.HandleForbiddenAsync(AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.handlechallengeasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.HandleChallengeAsync(AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.challengeasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.ChallengeAsync(AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.forbidasync">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.ForbidAsync(AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.scheme">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Scheme</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.options">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Options</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.context">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Context</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.request">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Request</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.response">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Response</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.originalpath">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.OriginalPath</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.originalpathbase">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.OriginalPathBase</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.logger">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Logger</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.urlencoder">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.UrlEncoder</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.clock">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Clock</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.timeprovider">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.TimeProvider</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.optionsmonitor">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.OptionsMonitor</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.events">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.Events</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.claimsissuer">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.ClaimsIssuer</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationhandler-1.currenturi">AuthenticationHandler&lt;ApiKeyAuthenticationOptions&gt;.CurrentUri</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="constructors">Constructors
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler__ctor_" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.#ctor*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler__ctor_Microsoft_Extensions_Options_IOptionsMonitor_Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions__Microsoft_Extensions_Logging_ILoggerFactory_System_Text_Encodings_Web_UrlEncoder_" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.#ctor(Microsoft.Extensions.Options.IOptionsMonitor{Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions},Microsoft.Extensions.Logging.ILoggerFactory,System.Text.Encodings.Web.UrlEncoder)">
+  ApiKeyAuthenticationHandler(IOptionsMonitor&lt;ApiKeyAuthenticationOptions&gt;, ILoggerFactory, UrlEncoder)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ApiKeyAuthenticationHandler(IOptionsMonitor&lt;ApiKeyAuthenticationOptions&gt; options, ILoggerFactory logger, UrlEncoder encoder)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>options</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.options.ioptionsmonitor-1">IOptionsMonitor</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html">ApiKeyAuthenticationOptions</a>&gt;</dt>
+    <dd></dd>
+    <dt><code>logger</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.logging.iloggerfactory">ILoggerFactory</a></dt>
+    <dd></dd>
+    <dt><code>encoder</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.text.encodings.web.urlencoder">UrlEncoder</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler_HandleAuthenticateAsync_" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler_HandleAuthenticateAsync" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync">
+  HandleAuthenticateAsync()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>Allows derived types to handle authentication.</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">protected override Task&lt;AuthenticateResult&gt; HandleAuthenticateAsync()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticateresult">AuthenticateResult</a>&gt;</dt>
+    <dd><p>The <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticateresult">AuthenticateResult</a>.</p>
+</dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 282 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html

@@ -0,0 +1,282 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ApiKeyAuthenticationOptions | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ApiKeyAuthenticationOptions | Apq.Cfg API ">
+      
+      <meta name="description" content="API Key 认证选项">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions" class="text-break">
+Class ApiKeyAuthenticationOptions  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Authentication.html">Authentication</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>API Key 认证选项</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public class ApiKeyAuthenticationOptions : AuthenticationSchemeOptions</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions">AuthenticationSchemeOptions</a></div>
+      <div><span class="xref">ApiKeyAuthenticationOptions</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.validate#microsoft-aspnetcore-authentication-authenticationschemeoptions-validate">AuthenticationSchemeOptions.Validate()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.validate#microsoft-aspnetcore-authentication-authenticationschemeoptions-validate(system-string)">AuthenticationSchemeOptions.Validate(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.claimsissuer">AuthenticationSchemeOptions.ClaimsIssuer</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.events">AuthenticationSchemeOptions.Events</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.eventstype">AuthenticationSchemeOptions.EventsType</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.forwarddefault">AuthenticationSchemeOptions.ForwardDefault</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.forwardauthenticate">AuthenticationSchemeOptions.ForwardAuthenticate</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.forwardchallenge">AuthenticationSchemeOptions.ForwardChallenge</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.forwardforbid">AuthenticationSchemeOptions.ForwardForbid</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.forwardsignin">AuthenticationSchemeOptions.ForwardSignIn</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.forwardsignout">AuthenticationSchemeOptions.ForwardSignOut</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.forwarddefaultselector">AuthenticationSchemeOptions.ForwardDefaultSelector</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.authentication.authenticationschemeoptions.timeprovider">AuthenticationSchemeOptions.TimeProvider</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_ApiKey_" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_ApiKey" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey">
+  ApiKey
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>API Key</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? ApiKey { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_HeaderName_" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_HeaderName" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName">
+  HeaderName
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>API Key 请求头名称</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string HeaderName { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 208 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.html

@@ -0,0 +1,208 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ApiKeyDefaults | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ApiKeyDefaults | Apq.Cfg API ">
+      
+      <meta name="description" content="API Key 认证方案常量">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyDefaults">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Authentication_ApiKeyDefaults" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyDefaults" class="text-break">
+Class ApiKeyDefaults  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Authentication.html">Authentication</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>API Key 认证方案常量</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static class ApiKeyDefaults</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ApiKeyDefaults</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="fields">Fields
+</h2>
+
+
+
+  <h3 id="Apq_Cfg_WebApi_Authentication_ApiKeyDefaults_AuthenticationScheme" data-uid="Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.AuthenticationScheme">
+  AuthenticationScheme
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public const string AuthenticationScheme = &quot;ApiKey&quot;</code></pre>
+  </div>
+
+
+
+
+  <h4 class="section">Field Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 135 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Authentication.html

@@ -0,0 +1,135 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Namespace Apq.Cfg.WebApi.Authentication | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Namespace Apq.Cfg.WebApi.Authentication | Apq.Cfg API ">
+      
+      
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Authentication">
+
+  <h1 id="Apq_Cfg_WebApi_Authentication" data-uid="Apq.Cfg.WebApi.Authentication" class="text-break">Namespace Apq.Cfg.WebApi.Authentication</h1>
+  <div class="markdown level0 summary"></div>
+  <div class="markdown level0 conceptual"></div>
+  <div class="markdown level0 remarks"></div>
+
+    <h3 id="classes">
+Classes
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html">ApiKeyAuthenticationHandler</a></dt>
+      <dd><p>API Key 认证处理器</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html">ApiKeyAuthenticationOptions</a></dt>
+      <dd><p>API Key 认证选项</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.html">ApiKeyDefaults</a></dt>
+      <dd><p>API Key 认证方案常量</p>
+</dd>
+    </dl>
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 157 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.AuthenticationType.html

@@ -0,0 +1,157 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Enum AuthenticationType | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Enum AuthenticationType | Apq.Cfg API ">
+      
+      <meta name="description" content="认证类型">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.AuthenticationType">
+
+
+
+
+  <h1 id="Apq_Cfg_WebApi_AuthenticationType" data-uid="Apq.Cfg.WebApi.AuthenticationType" class="text-break">
+Enum AuthenticationType  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>认证类型</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public enum AuthenticationType</code></pre>
+  </div>
+
+
+
+
+
+
+
+
+
+  <h2 id="fields">Fields
+</h2>
+  <dl class="parameters">
+    <dt id="Apq_Cfg_WebApi_AuthenticationType_ApiKey"><code>ApiKey = 1</code></dt>
+  
+  <dd><p>API Key 认证</p>
+</dd>
+    <dt id="Apq_Cfg_WebApi_AuthenticationType_JwtBearer"><code>JwtBearer = 2</code></dt>
+  
+  <dd><p>JWT Bearer 认证</p>
+</dd>
+    <dt id="Apq_Cfg_WebApi_AuthenticationType_None"><code>None = 0</code></dt>
+  
+  <dd><p>无认证</p>
+</dd>
+  </dl>
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 1382 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Controllers.ConfigController.html

@@ -0,0 +1,1382 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ConfigController | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ConfigController | Apq.Cfg API ">
+      
+      <meta name="description" content="配置 API 控制器">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Controllers.ConfigController">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Controllers_ConfigController" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController" class="text-break">
+Class ConfigController  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Controllers.html">Controllers</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>配置 API 控制器</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[ApiController]
+[Route(&quot;api/apqcfg&quot;)]
+public class ConfigController : ControllerBase</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase">ControllerBase</a></div>
+      <div><span class="xref">ConfigController</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.statuscode#microsoft-aspnetcore-mvc-controllerbase-statuscode(system-int32)">ControllerBase.StatusCode(int)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.statuscode#microsoft-aspnetcore-mvc-controllerbase-statuscode(system-int32-system-object)">ControllerBase.StatusCode(int, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.content#microsoft-aspnetcore-mvc-controllerbase-content(system-string)">ControllerBase.Content(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.content#microsoft-aspnetcore-mvc-controllerbase-content(system-string-system-string)">ControllerBase.Content(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.content#microsoft-aspnetcore-mvc-controllerbase-content(system-string-system-string-system-text-encoding)">ControllerBase.Content(string, string, Encoding)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.content#microsoft-aspnetcore-mvc-controllerbase-content(system-string-microsoft-net-http-headers-mediatypeheadervalue)">ControllerBase.Content(string, MediaTypeHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.nocontent">ControllerBase.NoContent()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.ok#microsoft-aspnetcore-mvc-controllerbase-ok">ControllerBase.Ok()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.ok#microsoft-aspnetcore-mvc-controllerbase-ok(system-object)">ControllerBase.Ok(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirect">ControllerBase.Redirect(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirectpermanent">ControllerBase.RedirectPermanent(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirectpreservemethod">ControllerBase.RedirectPreserveMethod(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirectpermanentpreservemethod">ControllerBase.RedirectPermanentPreserveMethod(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.localredirect">ControllerBase.LocalRedirect(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.localredirectpermanent">ControllerBase.LocalRedirectPermanent(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.localredirectpreservemethod">ControllerBase.LocalRedirectPreserveMethod(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.localredirectpermanentpreservemethod">ControllerBase.LocalRedirectPermanentPreserveMethod(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoaction#microsoft-aspnetcore-mvc-controllerbase-redirecttoaction">ControllerBase.RedirectToAction()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoaction#microsoft-aspnetcore-mvc-controllerbase-redirecttoaction(system-string)">ControllerBase.RedirectToAction(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoaction#microsoft-aspnetcore-mvc-controllerbase-redirecttoaction(system-string-system-object)">ControllerBase.RedirectToAction(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoaction#microsoft-aspnetcore-mvc-controllerbase-redirecttoaction(system-string-system-string)">ControllerBase.RedirectToAction(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoaction#microsoft-aspnetcore-mvc-controllerbase-redirecttoaction(system-string-system-string-system-object)">ControllerBase.RedirectToAction(string, string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoaction#microsoft-aspnetcore-mvc-controllerbase-redirecttoaction(system-string-system-string-system-string)">ControllerBase.RedirectToAction(string, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoaction#microsoft-aspnetcore-mvc-controllerbase-redirecttoaction(system-string-system-string-system-object-system-string)">ControllerBase.RedirectToAction(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpreservemethod">ControllerBase.RedirectToActionPreserveMethod(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoactionpermanent(system-string)">ControllerBase.RedirectToActionPermanent(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoactionpermanent(system-string-system-object)">ControllerBase.RedirectToActionPermanent(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoactionpermanent(system-string-system-string)">ControllerBase.RedirectToActionPermanent(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoactionpermanent(system-string-system-string-system-string)">ControllerBase.RedirectToActionPermanent(string, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoactionpermanent(system-string-system-string-system-object)">ControllerBase.RedirectToActionPermanent(string, string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoactionpermanent(system-string-system-string-system-object-system-string)">ControllerBase.RedirectToActionPermanent(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoactionpermanentpreservemethod">ControllerBase.RedirectToActionPermanentPreserveMethod(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroute#microsoft-aspnetcore-mvc-controllerbase-redirecttoroute(system-string)">ControllerBase.RedirectToRoute(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroute#microsoft-aspnetcore-mvc-controllerbase-redirecttoroute(system-object)">ControllerBase.RedirectToRoute(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroute#microsoft-aspnetcore-mvc-controllerbase-redirecttoroute(system-string-system-object)">ControllerBase.RedirectToRoute(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroute#microsoft-aspnetcore-mvc-controllerbase-redirecttoroute(system-string-system-string)">ControllerBase.RedirectToRoute(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroute#microsoft-aspnetcore-mvc-controllerbase-redirecttoroute(system-string-system-object-system-string)">ControllerBase.RedirectToRoute(string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroutepreservemethod">ControllerBase.RedirectToRoutePreserveMethod(string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroutepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoroutepermanent(system-string)">ControllerBase.RedirectToRoutePermanent(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroutepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoroutepermanent(system-object)">ControllerBase.RedirectToRoutePermanent(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroutepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoroutepermanent(system-string-system-object)">ControllerBase.RedirectToRoutePermanent(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroutepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoroutepermanent(system-string-system-string)">ControllerBase.RedirectToRoutePermanent(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroutepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttoroutepermanent(system-string-system-object-system-string)">ControllerBase.RedirectToRoutePermanent(string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttoroutepermanentpreservemethod">ControllerBase.RedirectToRoutePermanentPreserveMethod(string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopage#microsoft-aspnetcore-mvc-controllerbase-redirecttopage(system-string)">ControllerBase.RedirectToPage(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopage#microsoft-aspnetcore-mvc-controllerbase-redirecttopage(system-string-system-object)">ControllerBase.RedirectToPage(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopage#microsoft-aspnetcore-mvc-controllerbase-redirecttopage(system-string-system-string)">ControllerBase.RedirectToPage(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopage#microsoft-aspnetcore-mvc-controllerbase-redirecttopage(system-string-system-string-system-object)">ControllerBase.RedirectToPage(string, string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopage#microsoft-aspnetcore-mvc-controllerbase-redirecttopage(system-string-system-string-system-string)">ControllerBase.RedirectToPage(string, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopage#microsoft-aspnetcore-mvc-controllerbase-redirecttopage(system-string-system-string-system-object-system-string)">ControllerBase.RedirectToPage(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopagepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttopagepermanent(system-string)">ControllerBase.RedirectToPagePermanent(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopagepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttopagepermanent(system-string-system-object)">ControllerBase.RedirectToPagePermanent(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopagepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttopagepermanent(system-string-system-string)">ControllerBase.RedirectToPagePermanent(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopagepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttopagepermanent(system-string-system-string-system-string)">ControllerBase.RedirectToPagePermanent(string, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopagepermanent#microsoft-aspnetcore-mvc-controllerbase-redirecttopagepermanent(system-string-system-string-system-object-system-string)">ControllerBase.RedirectToPagePermanent(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopagepreservemethod">ControllerBase.RedirectToPagePreserveMethod(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.redirecttopagepermanentpreservemethod">ControllerBase.RedirectToPagePermanentPreserveMethod(string, string, object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string)">ControllerBase.File(byte[], string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string-system-boolean)">ControllerBase.File(byte[], string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string-system-string)">ControllerBase.File(byte[], string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string-system-string-system-boolean)">ControllerBase.File(byte[], string, string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.File(byte[], string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.File(byte[], string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.File(byte[], string, string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-byte()-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.File(byte[], string, string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string)">ControllerBase.File(Stream, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string-system-boolean)">ControllerBase.File(Stream, string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string-system-string)">ControllerBase.File(Stream, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string-system-string-system-boolean)">ControllerBase.File(Stream, string, string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.File(Stream, string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.File(Stream, string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.File(Stream, string, string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-io-stream-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.File(Stream, string, string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string)">ControllerBase.File(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string-system-boolean)">ControllerBase.File(string, string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string-system-string)">ControllerBase.File(string, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string-system-string-system-boolean)">ControllerBase.File(string, string, string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.File(string, string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.File(string, string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.File(string, string, string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.file#microsoft-aspnetcore-mvc-controllerbase-file(system-string-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.File(string, string, string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string)">ControllerBase.PhysicalFile(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string-system-boolean)">ControllerBase.PhysicalFile(string, string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string-system-string)">ControllerBase.PhysicalFile(string, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string-system-string-system-boolean)">ControllerBase.PhysicalFile(string, string, string, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.PhysicalFile(string, string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.PhysicalFile(string, string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue)">ControllerBase.PhysicalFile(string, string, string, DateTimeOffset?, EntityTagHeaderValue)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.physicalfile#microsoft-aspnetcore-mvc-controllerbase-physicalfile(system-string-system-string-system-string-system-nullable((system-datetimeoffset))-microsoft-net-http-headers-entitytagheadervalue-system-boolean)">ControllerBase.PhysicalFile(string, string, string, DateTimeOffset?, EntityTagHeaderValue, bool)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.unauthorized#microsoft-aspnetcore-mvc-controllerbase-unauthorized">ControllerBase.Unauthorized()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.unauthorized#microsoft-aspnetcore-mvc-controllerbase-unauthorized(system-object)">ControllerBase.Unauthorized(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.notfound#microsoft-aspnetcore-mvc-controllerbase-notfound">ControllerBase.NotFound()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.notfound#microsoft-aspnetcore-mvc-controllerbase-notfound(system-object)">ControllerBase.NotFound(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.badrequest#microsoft-aspnetcore-mvc-controllerbase-badrequest">ControllerBase.BadRequest()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.badrequest#microsoft-aspnetcore-mvc-controllerbase-badrequest(system-object)">ControllerBase.BadRequest(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.badrequest#microsoft-aspnetcore-mvc-controllerbase-badrequest(microsoft-aspnetcore-mvc-modelbinding-modelstatedictionary)">ControllerBase.BadRequest(ModelStateDictionary)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.unprocessableentity#microsoft-aspnetcore-mvc-controllerbase-unprocessableentity">ControllerBase.UnprocessableEntity()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.unprocessableentity#microsoft-aspnetcore-mvc-controllerbase-unprocessableentity(system-object)">ControllerBase.UnprocessableEntity(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.unprocessableentity#microsoft-aspnetcore-mvc-controllerbase-unprocessableentity(microsoft-aspnetcore-mvc-modelbinding-modelstatedictionary)">ControllerBase.UnprocessableEntity(ModelStateDictionary)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.conflict#microsoft-aspnetcore-mvc-controllerbase-conflict">ControllerBase.Conflict()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.conflict#microsoft-aspnetcore-mvc-controllerbase-conflict(system-object)">ControllerBase.Conflict(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.conflict#microsoft-aspnetcore-mvc-controllerbase-conflict(microsoft-aspnetcore-mvc-modelbinding-modelstatedictionary)">ControllerBase.Conflict(ModelStateDictionary)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.problem">ControllerBase.Problem(string, string, int?, string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.validationproblem#microsoft-aspnetcore-mvc-controllerbase-validationproblem(microsoft-aspnetcore-mvc-validationproblemdetails)">ControllerBase.ValidationProblem(ValidationProblemDetails)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.validationproblem#microsoft-aspnetcore-mvc-controllerbase-validationproblem(microsoft-aspnetcore-mvc-modelbinding-modelstatedictionary)">ControllerBase.ValidationProblem(ModelStateDictionary)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.validationproblem#microsoft-aspnetcore-mvc-controllerbase-validationproblem">ControllerBase.ValidationProblem()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.validationproblem#microsoft-aspnetcore-mvc-controllerbase-validationproblem(system-string-system-string-system-nullable((system-int32))-system-string-system-string-microsoft-aspnetcore-mvc-modelbinding-modelstatedictionary)">ControllerBase.ValidationProblem(string, string, int?, string, string, ModelStateDictionary)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.created#microsoft-aspnetcore-mvc-controllerbase-created">ControllerBase.Created()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.created#microsoft-aspnetcore-mvc-controllerbase-created(system-string-system-object)">ControllerBase.Created(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.created#microsoft-aspnetcore-mvc-controllerbase-created(system-uri-system-object)">ControllerBase.Created(Uri, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.createdataction#microsoft-aspnetcore-mvc-controllerbase-createdataction(system-string-system-object)">ControllerBase.CreatedAtAction(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.createdataction#microsoft-aspnetcore-mvc-controllerbase-createdataction(system-string-system-object-system-object)">ControllerBase.CreatedAtAction(string, object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.createdataction#microsoft-aspnetcore-mvc-controllerbase-createdataction(system-string-system-string-system-object-system-object)">ControllerBase.CreatedAtAction(string, string, object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.createdatroute#microsoft-aspnetcore-mvc-controllerbase-createdatroute(system-string-system-object)">ControllerBase.CreatedAtRoute(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.createdatroute#microsoft-aspnetcore-mvc-controllerbase-createdatroute(system-object-system-object)">ControllerBase.CreatedAtRoute(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.createdatroute#microsoft-aspnetcore-mvc-controllerbase-createdatroute(system-string-system-object-system-object)">ControllerBase.CreatedAtRoute(string, object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.accepted#microsoft-aspnetcore-mvc-controllerbase-accepted">ControllerBase.Accepted()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.accepted#microsoft-aspnetcore-mvc-controllerbase-accepted(system-object)">ControllerBase.Accepted(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.accepted#microsoft-aspnetcore-mvc-controllerbase-accepted(system-uri)">ControllerBase.Accepted(Uri)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.accepted#microsoft-aspnetcore-mvc-controllerbase-accepted(system-string)">ControllerBase.Accepted(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.accepted#microsoft-aspnetcore-mvc-controllerbase-accepted(system-string-system-object)">ControllerBase.Accepted(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.accepted#microsoft-aspnetcore-mvc-controllerbase-accepted(system-uri-system-object)">ControllerBase.Accepted(Uri, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedataction#microsoft-aspnetcore-mvc-controllerbase-acceptedataction(system-string)">ControllerBase.AcceptedAtAction(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedataction#microsoft-aspnetcore-mvc-controllerbase-acceptedataction(system-string-system-string)">ControllerBase.AcceptedAtAction(string, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedataction#microsoft-aspnetcore-mvc-controllerbase-acceptedataction(system-string-system-object)">ControllerBase.AcceptedAtAction(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedataction#microsoft-aspnetcore-mvc-controllerbase-acceptedataction(system-string-system-string-system-object)">ControllerBase.AcceptedAtAction(string, string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedataction#microsoft-aspnetcore-mvc-controllerbase-acceptedataction(system-string-system-object-system-object)">ControllerBase.AcceptedAtAction(string, object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedataction#microsoft-aspnetcore-mvc-controllerbase-acceptedataction(system-string-system-string-system-object-system-object)">ControllerBase.AcceptedAtAction(string, string, object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedatroute#microsoft-aspnetcore-mvc-controllerbase-acceptedatroute(system-object)">ControllerBase.AcceptedAtRoute(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedatroute#microsoft-aspnetcore-mvc-controllerbase-acceptedatroute(system-string)">ControllerBase.AcceptedAtRoute(string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedatroute#microsoft-aspnetcore-mvc-controllerbase-acceptedatroute(system-string-system-object)">ControllerBase.AcceptedAtRoute(string, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedatroute#microsoft-aspnetcore-mvc-controllerbase-acceptedatroute(system-object-system-object)">ControllerBase.AcceptedAtRoute(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.acceptedatroute#microsoft-aspnetcore-mvc-controllerbase-acceptedatroute(system-string-system-object-system-object)">ControllerBase.AcceptedAtRoute(string, object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.challenge#microsoft-aspnetcore-mvc-controllerbase-challenge">ControllerBase.Challenge()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.challenge#microsoft-aspnetcore-mvc-controllerbase-challenge(system-string())">ControllerBase.Challenge(params string[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.challenge#microsoft-aspnetcore-mvc-controllerbase-challenge(microsoft-aspnetcore-authentication-authenticationproperties)">ControllerBase.Challenge(AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.challenge#microsoft-aspnetcore-mvc-controllerbase-challenge(microsoft-aspnetcore-authentication-authenticationproperties-system-string())">ControllerBase.Challenge(AuthenticationProperties, params string[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.forbid#microsoft-aspnetcore-mvc-controllerbase-forbid">ControllerBase.Forbid()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.forbid#microsoft-aspnetcore-mvc-controllerbase-forbid(system-string())">ControllerBase.Forbid(params string[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.forbid#microsoft-aspnetcore-mvc-controllerbase-forbid(microsoft-aspnetcore-authentication-authenticationproperties)">ControllerBase.Forbid(AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.forbid#microsoft-aspnetcore-mvc-controllerbase-forbid(microsoft-aspnetcore-authentication-authenticationproperties-system-string())">ControllerBase.Forbid(AuthenticationProperties, params string[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signin#microsoft-aspnetcore-mvc-controllerbase-signin(system-security-claims-claimsprincipal)">ControllerBase.SignIn(ClaimsPrincipal)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signin#microsoft-aspnetcore-mvc-controllerbase-signin(system-security-claims-claimsprincipal-system-string)">ControllerBase.SignIn(ClaimsPrincipal, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signin#microsoft-aspnetcore-mvc-controllerbase-signin(system-security-claims-claimsprincipal-microsoft-aspnetcore-authentication-authenticationproperties)">ControllerBase.SignIn(ClaimsPrincipal, AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signin#microsoft-aspnetcore-mvc-controllerbase-signin(system-security-claims-claimsprincipal-microsoft-aspnetcore-authentication-authenticationproperties-system-string)">ControllerBase.SignIn(ClaimsPrincipal, AuthenticationProperties, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signout#microsoft-aspnetcore-mvc-controllerbase-signout">ControllerBase.SignOut()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signout#microsoft-aspnetcore-mvc-controllerbase-signout(microsoft-aspnetcore-authentication-authenticationproperties)">ControllerBase.SignOut(AuthenticationProperties)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signout#microsoft-aspnetcore-mvc-controllerbase-signout(system-string())">ControllerBase.SignOut(params string[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.signout#microsoft-aspnetcore-mvc-controllerbase-signout(microsoft-aspnetcore-authentication-authenticationproperties-system-string())">ControllerBase.SignOut(AuthenticationProperties, params string[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync-1(-0)">ControllerBase.TryUpdateModelAsync&lt;TModel&gt;(TModel)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync-1(-0-system-string)">ControllerBase.TryUpdateModelAsync&lt;TModel&gt;(TModel, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync-1(-0-system-string-microsoft-aspnetcore-mvc-modelbinding-ivalueprovider)">ControllerBase.TryUpdateModelAsync&lt;TModel&gt;(TModel, string, IValueProvider)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync-1(-0-system-string-system-linq-expressions-expression((system-func((-0-system-object))))())">ControllerBase.TryUpdateModelAsync&lt;TModel&gt;(TModel, string, params Expression&lt;Func&lt;TModel, object&gt;&gt;[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync-1(-0-system-string-system-func((microsoft-aspnetcore-mvc-modelbinding-modelmetadata-system-boolean)))">ControllerBase.TryUpdateModelAsync&lt;TModel&gt;(TModel, string, Func&lt;ModelMetadata, bool&gt;)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync-1(-0-system-string-microsoft-aspnetcore-mvc-modelbinding-ivalueprovider-system-linq-expressions-expression((system-func((-0-system-object))))())">ControllerBase.TryUpdateModelAsync&lt;TModel&gt;(TModel, string, IValueProvider, params Expression&lt;Func&lt;TModel, object&gt;&gt;[])</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync-1(-0-system-string-microsoft-aspnetcore-mvc-modelbinding-ivalueprovider-system-func((microsoft-aspnetcore-mvc-modelbinding-modelmetadata-system-boolean)))">ControllerBase.TryUpdateModelAsync&lt;TModel&gt;(TModel, string, IValueProvider, Func&lt;ModelMetadata, bool&gt;)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync(system-object-system-type-system-string)">ControllerBase.TryUpdateModelAsync(object, Type, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryupdatemodelasync#microsoft-aspnetcore-mvc-controllerbase-tryupdatemodelasync(system-object-system-type-system-string-microsoft-aspnetcore-mvc-modelbinding-ivalueprovider-system-func((microsoft-aspnetcore-mvc-modelbinding-modelmetadata-system-boolean)))">ControllerBase.TryUpdateModelAsync(object, Type, string, IValueProvider, Func&lt;ModelMetadata, bool&gt;)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryvalidatemodel#microsoft-aspnetcore-mvc-controllerbase-tryvalidatemodel(system-object)">ControllerBase.TryValidateModel(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.tryvalidatemodel#microsoft-aspnetcore-mvc-controllerbase-tryvalidatemodel(system-object-system-string)">ControllerBase.TryValidateModel(object, string)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.httpcontext">ControllerBase.HttpContext</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.request">ControllerBase.Request</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.response">ControllerBase.Response</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.routedata">ControllerBase.RouteData</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.modelstate">ControllerBase.ModelState</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.controllercontext">ControllerBase.ControllerContext</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.metadataprovider">ControllerBase.MetadataProvider</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.modelbinderfactory">ControllerBase.ModelBinderFactory</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.url">ControllerBase.Url</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.objectvalidator">ControllerBase.ObjectValidator</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.problemdetailsfactory">ControllerBase.ProblemDetailsFactory</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.user">ControllerBase.User</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.controllerbase.empty">ControllerBase.Empty</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="constructors">Constructors
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController__ctor_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.#ctor*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController__ctor_Apq_Cfg_WebApi_Services_IConfigApiService_Microsoft_Extensions_Options_IOptions_Apq_Cfg_WebApi_WebApiOptions__" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.#ctor(Apq.Cfg.WebApi.Services.IConfigApiService,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})">
+  ConfigController(IConfigApiService, IOptions&lt;WebApiOptions&gt;)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ConfigController(IConfigApiService service, IOptions&lt;WebApiOptions&gt; options)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>service</code> <a class="xref" href="Apq.Cfg.WebApi.Services.IConfigApiService.html">IConfigApiService</a></dt>
+    <dd></dd>
+    <dt><code>options</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.options.ioptions-1">IOptions</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_BatchUpdate_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_BatchUpdate_Apq_Cfg_WebApi_Models_BatchUpdateRequest_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)">
+  BatchUpdate(BatchUpdateRequest)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>批量更新配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpPut(&quot;batch&quot;)]
+public ActionResult&lt;ApiResponse&lt;bool&gt;&gt; BatchUpdate(BatchUpdateRequest request)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>request</code> <a class="xref" href="Apq.Cfg.WebApi.Models.BatchUpdateRequest.html">BatchUpdateRequest</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_DeleteKey_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_DeleteKey_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey(System.String)">
+  DeleteKey(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>删除配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpDelete(&quot;keys/{*key}&quot;)]
+public ActionResult&lt;ApiResponse&lt;bool&gt;&gt; DeleteKey(string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_DeleteSourceKey_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_DeleteSourceKey_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey(System.Int32,System.String,System.String)">
+  DeleteSourceKey(int, string, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>删除指定配置源的配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpDelete(&quot;sources/{level:int}/{name}/keys/{*key}&quot;)]
+public ActionResult&lt;ApiResponse&lt;bool&gt;&gt; DeleteSourceKey(int level, string name, string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_Export_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.Export*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_Export_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.Export(System.String)">
+  Export(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>导出合并后配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;export/{format}&quot;)]
+public ActionResult Export(string format)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>format</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult">ActionResult</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_ExportSource_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_ExportSource_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource(System.Int32,System.String,System.String)">
+  ExportSource(int, string, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>导出指定配置源</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;sources/{level:int}/{name}/export/{format}&quot;)]
+public ActionResult ExportSource(int level, string name, string format)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>format</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult">ActionResult</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMerged_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMerged" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged">
+  GetMerged()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的所有配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;merged&quot;)]
+public ActionResult&lt;ApiResponse&lt;Dictionary&lt;string, string?&gt;&gt;&gt; GetMerged()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedSection_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedSection_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection(System.String)">
+  GetMergedSection(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的配置节</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;merged/sections/{*section}&quot;)]
+public ActionResult&lt;ApiResponse&lt;Dictionary&lt;string, string?&gt;&gt;&gt; GetMergedSection(string section)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>section</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedTree_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedTree" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree">
+  GetMergedTree()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的配置树</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;merged/tree&quot;)]
+public ActionResult&lt;ApiResponse&lt;ConfigTreeNode&gt;&gt; GetMergedTree()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedValue_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedValue_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue(System.String)">
+  GetMergedValue(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的单个配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;merged/keys/{*key}&quot;)]
+public ActionResult&lt;ApiResponse&lt;ConfigValueResponse&gt;&gt; GetMergedValue(string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html">ConfigValueResponse</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceConfig_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceConfig_System_Int32_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig(System.Int32,System.String)">
+  GetSourceConfig(int, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源内容</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;sources/{level:int}/{name}&quot;)]
+public ActionResult&lt;ApiResponse&lt;Dictionary&lt;string, string?&gt;&gt;&gt; GetSourceConfig(int level, string name)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceTree_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceTree_System_Int32_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree(System.Int32,System.String)">
+  GetSourceTree(int, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的配置树</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;sources/{level:int}/{name}/tree&quot;)]
+public ActionResult&lt;ApiResponse&lt;ConfigTreeNode&gt;&gt; GetSourceTree(int level, string name)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceValue_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceValue_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue(System.Int32,System.String,System.String)">
+  GetSourceValue(int, string, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的单个配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;sources/{level:int}/{name}/keys/{*key}&quot;)]
+public ActionResult&lt;ApiResponse&lt;ConfigValueResponse&gt;&gt; GetSourceValue(int level, string name, string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html">ConfigValueResponse</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSources_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSources*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_GetSources" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.GetSources">
+  GetSources()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取所有配置源列表</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpGet(&quot;sources&quot;)]
+public ActionResult&lt;ApiResponse&lt;List&lt;ConfigSourceInfo&gt;&gt;&gt; GetSources()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Apq.Cfg.Sources.ConfigSourceInfo.html">ConfigSourceInfo</a>&gt;&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_Reload_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.Reload*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_Reload" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.Reload">
+  Reload()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>重新加载配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpPost(&quot;reload&quot;)]
+public ActionResult&lt;ApiResponse&lt;bool&gt;&gt; Reload()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_Save_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.Save*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_Save" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.Save">
+  Save()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>保存配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpPost(&quot;save&quot;)]
+public Task&lt;ActionResult&lt;ApiResponse&lt;bool&gt;&gt;&gt; Save()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_SetSourceValue_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_SetSourceValue_System_Int32_System_String_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue(System.Int32,System.String,System.String,System.String)">
+  SetSourceValue(int, string, string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>设置指定配置源的配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpPut(&quot;sources/{level:int}/{name}/keys/{*key}&quot;)]
+public ActionResult&lt;ApiResponse&lt;bool&gt;&gt; SetSourceValue(int level, string name, string key, string? value)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Controllers_ConfigController_SetValue_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.SetValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Controllers_ConfigController_SetValue_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Controllers.ConfigController.SetValue(System.String,System.String)">
+  SetValue(string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>设置配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">[HttpPut(&quot;keys/{*key}&quot;)]
+public ActionResult&lt;ApiResponse&lt;bool&gt;&gt; SetValue(string key, string? value)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.mvc.actionresult-1">ActionResult</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 125 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Controllers.html

@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Namespace Apq.Cfg.WebApi.Controllers | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Namespace Apq.Cfg.WebApi.Controllers | Apq.Cfg API ">
+      
+      
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Controllers">
+
+  <h1 id="Apq_Cfg_WebApi_Controllers" data-uid="Apq.Cfg.WebApi.Controllers" class="text-break">Namespace Apq.Cfg.WebApi.Controllers</h1>
+  <div class="markdown level0 summary"></div>
+  <div class="markdown level0 conceptual"></div>
+  <div class="markdown level0 remarks"></div>
+
+    <h3 id="classes">
+Classes
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Controllers.ConfigController.html">ConfigController</a></dt>
+      <dd><p>配置 API 控制器</p>
+</dd>
+    </dl>
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 335 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.JwtOptions.html

@@ -0,0 +1,335 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class JwtOptions | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class JwtOptions | Apq.Cfg API ">
+      
+      <meta name="description" content="JWT 认证配置选项">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.JwtOptions">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_JwtOptions" data-uid="Apq.Cfg.WebApi.JwtOptions" class="text-break">
+Class JwtOptions  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>JWT 认证配置选项</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class JwtOptions</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">JwtOptions</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_JwtOptions_Audience_" data-uid="Apq.Cfg.WebApi.JwtOptions.Audience*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_JwtOptions_Audience" data-uid="Apq.Cfg.WebApi.JwtOptions.Audience">
+  Audience
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>受众</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Audience { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_JwtOptions_Authority_" data-uid="Apq.Cfg.WebApi.JwtOptions.Authority*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_JwtOptions_Authority" data-uid="Apq.Cfg.WebApi.JwtOptions.Authority">
+  Authority
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>认证服务器地址</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Authority { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_JwtOptions_RequireHttpsMetadata_" data-uid="Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_JwtOptions_RequireHttpsMetadata" data-uid="Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata">
+  RequireHttpsMetadata
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否要求 HTTPS 元数据,默认 true</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool RequireHttpsMetadata { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_JwtOptions_ValidateAudience_" data-uid="Apq.Cfg.WebApi.JwtOptions.ValidateAudience*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_JwtOptions_ValidateAudience" data-uid="Apq.Cfg.WebApi.JwtOptions.ValidateAudience">
+  ValidateAudience
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否验证受众,默认 true</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool ValidateAudience { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_JwtOptions_ValidateIssuer_" data-uid="Apq.Cfg.WebApi.JwtOptions.ValidateIssuer*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_JwtOptions_ValidateIssuer" data-uid="Apq.Cfg.WebApi.JwtOptions.ValidateIssuer">
+  ValidateIssuer
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否验证颁发者,默认 true</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool ValidateIssuer { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 251 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html

@@ -0,0 +1,251 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ConfigApiMiddleware | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ConfigApiMiddleware | Apq.Cfg API ">
+      
+      <meta name="description" content="配置 API 启用检查中间件">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware" data-uid="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware" class="text-break">
+Class ConfigApiMiddleware  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Middleware.html">Middleware</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>配置 API 启用检查中间件</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public class ConfigApiMiddleware</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ConfigApiMiddleware</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="constructors">Constructors
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware__ctor_" data-uid="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.#ctor*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware__ctor_Microsoft_AspNetCore_Http_RequestDelegate_Microsoft_Extensions_Options_IOptions_Apq_Cfg_WebApi_WebApiOptions__" data-uid="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.#ctor(Microsoft.AspNetCore.Http.RequestDelegate,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})">
+  ConfigApiMiddleware(RequestDelegate, IOptions&lt;WebApiOptions&gt;)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ConfigApiMiddleware(RequestDelegate next, IOptions&lt;WebApiOptions&gt; options)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>next</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.http.requestdelegate">RequestDelegate</a></dt>
+    <dd></dd>
+    <dt><code>options</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.options.ioptions-1">IOptions</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware_InvokeAsync_" data-uid="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware_InvokeAsync_Microsoft_AspNetCore_Http_HttpContext_" data-uid="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync(Microsoft.AspNetCore.Http.HttpContext)">
+  InvokeAsync(HttpContext)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public Task InvokeAsync(HttpContext context)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>context</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.aspnetcore.http.httpcontext">HttpContext</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task">Task</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 125 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Middleware.html

@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Namespace Apq.Cfg.WebApi.Middleware | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Namespace Apq.Cfg.WebApi.Middleware | Apq.Cfg API ">
+      
+      
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Middleware">
+
+  <h1 id="Apq_Cfg_WebApi_Middleware" data-uid="Apq.Cfg.WebApi.Middleware" class="text-break">Namespace Apq.Cfg.WebApi.Middleware</h1>
+  <div class="markdown level0 summary"></div>
+  <div class="markdown level0 conceptual"></div>
+  <div class="markdown level0 remarks"></div>
+
+    <h3 id="classes">
+Classes
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html">ConfigApiMiddleware</a></dt>
+      <dd><p>配置 API 启用检查中间件</p>
+</dd>
+    </dl>
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 382 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ApiResponse-1.html

@@ -0,0 +1,382 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ApiResponse&lt;T&gt; | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ApiResponse&lt;T&gt; | Apq.Cfg API ">
+      
+      <meta name="description" content="统一 API 响应格式">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Models_ApiResponse_1" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1" class="text-break">
+Class ApiResponse&lt;T&gt;  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Models.html">Models</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>统一 API 响应格式</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class ApiResponse&lt;T&gt;</code></pre>
+  </div>
+
+
+
+  <h4 class="section">Type Parameters</h4>
+  <dl class="parameters">
+    <dt><code>T</code></dt>
+    <dd></dd>
+  </dl>
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ApiResponse&lt;T&gt;</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_1_Data_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Data*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_1_Data" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Data">
+  Data
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public T? Data { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><span class="xref">T</span></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_1_Error_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Error*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_1_Error" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Error">
+  Error
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? Error { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_1_ErrorCode_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.ErrorCode*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_1_ErrorCode" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.ErrorCode">
+  ErrorCode
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? ErrorCode { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_1_Success_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Success*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_1_Success" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Success">
+  Success
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool Success { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_1_Fail_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Fail*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_1_Fail_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Fail(System.String,System.String)">
+  Fail(string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static ApiResponse&lt;T&gt; Fail(string error, string? errorCode = null)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>error</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>errorCode</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;T&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_1_Ok_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Ok*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_1_Ok__0_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse`1.Ok(`0)">
+  Ok(T)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static ApiResponse&lt;T&gt; Ok(T data)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>data</code> <span class="xref">T</span></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse</a>&lt;T&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 341 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ApiResponse.html

@@ -0,0 +1,341 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ApiResponse | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ApiResponse | Apq.Cfg API ">
+      
+      <meta name="description" content="非泛型 API 响应">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Models.ApiResponse">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Models_ApiResponse" data-uid="Apq.Cfg.WebApi.Models.ApiResponse" class="text-break">
+Class ApiResponse  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Models.html">Models</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>非泛型 API 响应</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class ApiResponse</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ApiResponse</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_Error_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Error*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_Error" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Error">
+  Error
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? Error { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_ErrorCode_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_ErrorCode" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode">
+  ErrorCode
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? ErrorCode { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_Success_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Success*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_Success" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Success">
+  Success
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool Success { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_Fail_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Fail*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_Fail_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Fail(System.String,System.String)">
+  Fail(string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static ApiResponse Fail(string error, string? errorCode = null)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>error</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>errorCode</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse.html">ApiResponse</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ApiResponse_Ok_" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Ok*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ApiResponse_Ok" data-uid="Apq.Cfg.WebApi.Models.ApiResponse.Ok">
+  Ok()
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static ApiResponse Ok()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse.html">ApiResponse</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 270 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html

@@ -0,0 +1,270 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class BatchUpdateRequest | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class BatchUpdateRequest | Apq.Cfg API ">
+      
+      <meta name="description" content="批量更新请求">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Models_BatchUpdateRequest" data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest" class="text-break">
+Class BatchUpdateRequest  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Models.html">Models</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>批量更新请求</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class BatchUpdateRequest</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">BatchUpdateRequest</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetLevel_" data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetLevel" data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel">
+  TargetLevel
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>目标配置源的层级(可选,不指定则写入主写入源)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public int? TargetLevel { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a>?</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetName_" data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetName" data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName">
+  TargetName
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>目标配置源的名称(可选,不指定则写入主写入源)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? TargetName { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_BatchUpdateRequest_Values_" data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_BatchUpdateRequest_Values" data-uid="Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values">
+  Values
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public Dictionary&lt;string, string?&gt; Values { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 330 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html

@@ -0,0 +1,330 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ConfigTreeNode | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ConfigTreeNode | Apq.Cfg API ">
+      
+      <meta name="description" content="配置树节点">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Models_ConfigTreeNode" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode" class="text-break">
+Class ConfigTreeNode  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Models.html">Models</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>配置树节点</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class ConfigTreeNode</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ConfigTreeNode</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigTreeNode_Children_" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.Children*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigTreeNode_Children" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.Children">
+  Children
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public List&lt;ConfigTreeNode&gt; Children { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigTreeNode_HasValue_" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigTreeNode_HasValue" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue">
+  HasValue
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool HasValue { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigTreeNode_IsMasked_" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigTreeNode_IsMasked" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked">
+  IsMasked
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool IsMasked { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigTreeNode_Key_" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.Key*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigTreeNode_Key" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.Key">
+  Key
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Key { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigTreeNode_Value_" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.Value*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigTreeNode_Value" data-uid="Apq.Cfg.WebApi.Models.ConfigTreeNode.Value">
+  Value
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? Value { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 299 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html

@@ -0,0 +1,299 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ConfigValueResponse | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ConfigValueResponse | Apq.Cfg API ">
+      
+      <meta name="description" content="配置值响应">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Models_ConfigValueResponse" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse" class="text-break">
+Class ConfigValueResponse  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Models.html">Models</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>配置值响应</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class ConfigValueResponse</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ConfigValueResponse</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigValueResponse_Exists_" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigValueResponse_Exists" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists">
+  Exists
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool Exists { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigValueResponse_IsMasked_" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigValueResponse_IsMasked" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked">
+  IsMasked
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool IsMasked { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigValueResponse_Key_" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.Key*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigValueResponse_Key" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.Key">
+  Key
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Key { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Models_ConfigValueResponse_Value_" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.Value*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Models_ConfigValueResponse_Value" data-uid="Apq.Cfg.WebApi.Models.ConfigValueResponse.Value">
+  Value
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? Value { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 145 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Models.html

@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Namespace Apq.Cfg.WebApi.Models | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Namespace Apq.Cfg.WebApi.Models | Apq.Cfg API ">
+      
+      
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Models">
+
+  <h1 id="Apq_Cfg_WebApi_Models" data-uid="Apq.Cfg.WebApi.Models" class="text-break">Namespace Apq.Cfg.WebApi.Models</h1>
+  <div class="markdown level0 summary"></div>
+  <div class="markdown level0 conceptual"></div>
+  <div class="markdown level0 remarks"></div>
+
+    <h3 id="classes">
+Classes
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse.html">ApiResponse</a></dt>
+      <dd><p>非泛型 API 响应</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ApiResponse-1.html">ApiResponse&lt;T&gt;</a></dt>
+      <dd><p>统一 API 响应格式</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Models.BatchUpdateRequest.html">BatchUpdateRequest</a></dt>
+      <dd><p>批量更新请求</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a></dt>
+      <dd><p>配置树节点</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html">ConfigValueResponse</a></dt>
+      <dd><p>配置值响应</p>
+</dd>
+    </dl>
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 336 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html

@@ -0,0 +1,336 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ServiceCollectionExtensions | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ServiceCollectionExtensions | Apq.Cfg API ">
+      
+      <meta name="description" content="服务集合扩展方法">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_ServiceCollectionExtensions" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions" class="text-break">
+Class ServiceCollectionExtensions  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>服务集合扩展方法</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static class ServiceCollectionExtensions</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ServiceCollectionExtensions</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.memberwiseclone">object.MemberwiseClone()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApi_" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApi_Microsoft_Extensions_DependencyInjection_IServiceCollection_Microsoft_Extensions_Configuration_IConfiguration_System_Action_Apq_Cfg_WebApi_WebApiOptions__" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration,System.Action{Apq.Cfg.WebApi.WebApiOptions})">
+  AddApqCfgWebApi(IServiceCollection, IConfiguration, Action&lt;WebApiOptions&gt;?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>添加 Apq.Cfg Web API 服务(从配置节绑定)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static IServiceCollection AddApqCfgWebApi(this IServiceCollection services, IConfiguration configuration, Action&lt;WebApiOptions&gt;? configure = null)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>services</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+    <dt><code>configuration</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.configuration.iconfiguration">IConfiguration</a></dt>
+    <dd></dd>
+    <dt><code>configure</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action-1">Action</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApi_" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApi_Microsoft_Extensions_DependencyInjection_IServiceCollection_System_Action_Apq_Cfg_WebApi_WebApiOptions__" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{Apq.Cfg.WebApi.WebApiOptions})">
+  AddApqCfgWebApi(IServiceCollection, Action&lt;WebApiOptions&gt;?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>添加 Apq.Cfg Web API 服务</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static IServiceCollection AddApqCfgWebApi(this IServiceCollection services, Action&lt;WebApiOptions&gt;? configure = null)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>services</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+    <dt><code>configure</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.action-1">Action</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiAuthentication_" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiAuthentication_Microsoft_Extensions_DependencyInjection_IServiceCollection_Apq_Cfg_WebApi_WebApiOptions_" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)">
+  AddApqCfgWebApiAuthentication(IServiceCollection, WebApiOptions)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>添加 Apq.Cfg Web API 认证</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static IServiceCollection AddApqCfgWebApiAuthentication(this IServiceCollection services, WebApiOptions options)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>services</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+    <dt><code>options</code> <a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiCors_" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiCors_Microsoft_Extensions_DependencyInjection_IServiceCollection_Apq_Cfg_WebApi_WebApiOptions_" data-uid="Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)">
+  AddApqCfgWebApiCors(IServiceCollection, WebApiOptions)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>添加 Apq.Cfg Web API CORS</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public static IServiceCollection AddApqCfgWebApiCors(this IServiceCollection services, WebApiOptions options)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>services</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+    <dt><code>options</code> <a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.dependencyinjection.iservicecollection">IServiceCollection</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 809 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Services.ConfigApiService.html

@@ -0,0 +1,809 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class ConfigApiService | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class ConfigApiService | Apq.Cfg API ">
+      
+      <meta name="description" content="配置 API 服务实现">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Services.ConfigApiService">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Services_ConfigApiService" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService" class="text-break">
+Class ConfigApiService  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Services.html">Services</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>配置 API 服务实现</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class ConfigApiService : IConfigApiService</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">ConfigApiService</span></div>
+    </dd>
+  </dl>
+
+  <dl class="typelist implements">
+    <dt>Implements</dt>
+    <dd>
+      <div><a class="xref" href="Apq.Cfg.WebApi.Services.IConfigApiService.html">IConfigApiService</a></div>
+    </dd>
+  </dl>
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="constructors">Constructors
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService__ctor_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.#ctor*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService__ctor_Apq_Cfg_ICfgRoot_Microsoft_Extensions_Options_IOptions_Apq_Cfg_WebApi_WebApiOptions__" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.#ctor(Apq.Cfg.ICfgRoot,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})">
+  ConfigApiService(ICfgRoot, IOptions&lt;WebApiOptions&gt;)
+  
+  </h3>
+
+  <div class="markdown level1 summary"></div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ConfigApiService(ICfgRoot cfgRoot, IOptions&lt;WebApiOptions&gt; options)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>cfgRoot</code> <a class="xref" href="Apq.Cfg.ICfgRoot.html">ICfgRoot</a></dt>
+    <dd></dd>
+    <dt><code>options</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/microsoft.extensions.options.ioptions-1">IOptions</a>&lt;<a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_BatchUpdate_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_BatchUpdate_Apq_Cfg_WebApi_Models_BatchUpdateRequest_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)">
+  BatchUpdate(BatchUpdateRequest)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>批量设置配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool BatchUpdate(BatchUpdateRequest request)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>request</code> <a class="xref" href="Apq.Cfg.WebApi.Models.BatchUpdateRequest.html">BatchUpdateRequest</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_DeleteKey_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_DeleteKey_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey(System.String)">
+  DeleteKey(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>删除配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool DeleteKey(string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_DeleteSourceKey_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_DeleteSourceKey_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)">
+  DeleteSourceKey(int, string, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>删除指定配置源的配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool DeleteSourceKey(int level, string name, string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_Export_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.Export*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_Export_System_String_System_Nullable_System_Int32__System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)">
+  Export(string, int?, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>导出配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string Export(string format, int? level = null, string? name = null)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>format</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a>?</dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedConfig_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedConfig" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig">
+  GetMergedConfig()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的所有配置(扁平化键值对)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public Dictionary&lt;string, string?&gt; GetMergedConfig()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedSection_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedSection_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection(System.String)">
+  GetMergedSection(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的配置节</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public Dictionary&lt;string, string?&gt; GetMergedSection(string section)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>section</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedTree_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedTree" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree">
+  GetMergedTree()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的配置树结构</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ConfigTreeNode GetMergedTree()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedValue_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedValue_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue(System.String)">
+  GetMergedValue(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的单个配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ConfigValueResponse GetMergedValue(string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html">ConfigValueResponse</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceConfig_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceConfig_System_Int32_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig(System.Int32,System.String)">
+  GetSourceConfig(int, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的内容</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public Dictionary&lt;string, string?&gt;? GetSourceConfig(int level, string name)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceTree_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceTree_System_Int32_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree(System.Int32,System.String)">
+  GetSourceTree(int, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的配置树</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ConfigTreeNode? GetSourceTree(int level, string name)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceValue_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceValue_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue(System.Int32,System.String,System.String)">
+  GetSourceValue(int, string, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的单个配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public ConfigValueResponse? GetSourceValue(int level, string name, string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html">ConfigValueResponse</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSources_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSources*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_GetSources" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.GetSources">
+  GetSources()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取所有配置源列表</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public List&lt;ConfigSourceInfo&gt; GetSources()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Apq.Cfg.Sources.ConfigSourceInfo.html">ConfigSourceInfo</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_Reload_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.Reload*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_Reload" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.Reload">
+  Reload()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>重新加载配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool Reload()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_SaveAsync_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_SaveAsync" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync">
+  SaveAsync()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>保存配置到持久化存储</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public Task&lt;bool&gt; SaveAsync()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_SetSourceValue_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_SetSourceValue_System_Int32_System_String_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)">
+  SetSourceValue(int, string, string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>设置指定配置源的配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool SetSourceValue(int level, string name, string key, string? value)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_ConfigApiService_SetValue_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.SetValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_ConfigApiService_SetValue_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.ConfigApiService.SetValue(System.String,System.String)">
+  SetValue(string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>设置配置值(写入主写入源)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool SetValue(string key, string? value)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 737 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Services.IConfigApiService.html

@@ -0,0 +1,737 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Interface IConfigApiService | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Interface IConfigApiService | Apq.Cfg API ">
+      
+      <meta name="description" content="配置 API 服务接口">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Services.IConfigApiService">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_Services_IConfigApiService" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService" class="text-break">
+Interface IConfigApiService  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a>.<a class="xref" href="Apq.Cfg.WebApi.Services.html">Services</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>配置 API 服务接口</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public interface IConfigApiService</code></pre>
+  </div>
+
+
+
+
+
+
+
+
+
+
+
+
+
+  <h2 class="section" id="methods">Methods
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_BatchUpdate_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_BatchUpdate_Apq_Cfg_WebApi_Models_BatchUpdateRequest_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)">
+  BatchUpdate(BatchUpdateRequest)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>批量设置配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">bool BatchUpdate(BatchUpdateRequest request)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>request</code> <a class="xref" href="Apq.Cfg.WebApi.Models.BatchUpdateRequest.html">BatchUpdateRequest</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_DeleteKey_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_DeleteKey_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey(System.String)">
+  DeleteKey(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>删除配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">bool DeleteKey(string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_DeleteSourceKey_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_DeleteSourceKey_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)">
+  DeleteSourceKey(int, string, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>删除指定配置源的配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">bool DeleteSourceKey(int level, string name, string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_Export_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.Export*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_Export_System_String_System_Nullable_System_Int32__System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)">
+  Export(string, int?, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>导出配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">string Export(string format, int? level = null, string? name = null)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>format</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a>?</dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedConfig_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedConfig" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig">
+  GetMergedConfig()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的所有配置(扁平化键值对)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">Dictionary&lt;string, string?&gt; GetMergedConfig()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedSection_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedSection_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection(System.String)">
+  GetMergedSection(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的配置节</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">Dictionary&lt;string, string?&gt; GetMergedSection(string section)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>section</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedTree_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedTree" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree">
+  GetMergedTree()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的配置树结构</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">ConfigTreeNode GetMergedTree()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedValue_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedValue_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue(System.String)">
+  GetMergedValue(string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取合并后的单个配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">ConfigValueResponse GetMergedValue(string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html">ConfigValueResponse</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceConfig_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceConfig_System_Int32_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig(System.Int32,System.String)">
+  GetSourceConfig(int, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的内容</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">Dictionary&lt;string, string?&gt;? GetSourceConfig(int level, string name)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.dictionary-2">Dictionary</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>, <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceTree_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceTree_System_Int32_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree(System.Int32,System.String)">
+  GetSourceTree(int, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的配置树</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">ConfigTreeNode? GetSourceTree(int level, string name)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html">ConfigTreeNode</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceValue_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceValue_System_Int32_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue(System.Int32,System.String,System.String)">
+  GetSourceValue(int, string, string)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取指定配置源的单个配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">ConfigValueResponse? GetSourceValue(int level, string name, string key)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html">ConfigValueResponse</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSources_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSources*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_GetSources" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.GetSources">
+  GetSources()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>获取所有配置源列表</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">List&lt;ConfigSourceInfo&gt; GetSources()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.collections.generic.list-1">List</a>&lt;<a class="xref" href="Apq.Cfg.Sources.ConfigSourceInfo.html">ConfigSourceInfo</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_Reload_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.Reload*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_Reload" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.Reload">
+  Reload()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>重新加载配置</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">bool Reload()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_SaveAsync_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_SaveAsync" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync">
+  SaveAsync()
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>保存配置到持久化存储</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">Task&lt;bool&gt; SaveAsync()</code></pre>
+  </div>
+
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.threading.tasks.task-1">Task</a>&lt;<a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a>&gt;</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_SetSourceValue_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_SetSourceValue_System_Int32_System_String_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)">
+  SetSourceValue(int, string, string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>设置指定配置源的配置值</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">bool SetSourceValue(int level, string name, string key, string? value)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>level</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.int32">int</a></dt>
+    <dd></dd>
+    <dt><code>name</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_Services_IConfigApiService_SetValue_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.SetValue*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_Services_IConfigApiService_SetValue_System_String_System_String_" data-uid="Apq.Cfg.WebApi.Services.IConfigApiService.SetValue(System.String,System.String)">
+  SetValue(string, string?)
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>设置配置值(写入主写入源)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">bool SetValue(string key, string? value)</code></pre>
+  </div>
+
+  <h4 class="section">Parameters</h4>
+  <dl class="parameters">
+    <dt><code>key</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+    <dt><code>value</code> <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+  <h4 class="section">Returns</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 133 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.Services.html

@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Namespace Apq.Cfg.WebApi.Services | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Namespace Apq.Cfg.WebApi.Services | Apq.Cfg API ">
+      
+      
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.Services">
+
+  <h1 id="Apq_Cfg_WebApi_Services" data-uid="Apq.Cfg.WebApi.Services" class="text-break">Namespace Apq.Cfg.WebApi.Services</h1>
+  <div class="markdown level0 summary"></div>
+  <div class="markdown level0 conceptual"></div>
+  <div class="markdown level0 remarks"></div>
+
+    <h3 id="classes">
+Classes
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Services.ConfigApiService.html">ConfigApiService</a></dt>
+      <dd><p>配置 API 服务实现</p>
+</dd>
+    </dl>
+    <h3 id="interfaces">
+Interfaces
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.Services.IConfigApiService.html">IConfigApiService</a></dt>
+      <dd><p>配置 API 服务接口</p>
+</dd>
+    </dl>
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 626 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.WebApiOptions.html

@@ -0,0 +1,626 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Class WebApiOptions | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Class WebApiOptions | Apq.Cfg API ">
+      
+      <meta name="description" content="Web API 配置选项">
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi.WebApiOptions">
+
+
+
+  <h1 id="Apq_Cfg_WebApi_WebApiOptions" data-uid="Apq.Cfg.WebApi.WebApiOptions" class="text-break">
+Class WebApiOptions  
+  </h1>
+
+  <div class="facts text-secondary">
+    <dl><dt>Namespace</dt><dd><a class="xref" href="Apq.html">Apq</a>.<a class="xref" href="Apq.Cfg.html">Cfg</a>.<a class="xref" href="Apq.Cfg.WebApi.html">WebApi</a></dd></dl>
+  <dl><dt>Assembly</dt><dd>Apq.Cfg.WebApi.dll</dd></dl>
+  </div>
+
+  <div class="markdown summary"><p>Web API 配置选项</p>
+</div>
+  <div class="markdown conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public sealed class WebApiOptions</code></pre>
+  </div>
+
+
+
+
+  <dl class="typelist inheritance">
+    <dt>Inheritance</dt>
+    <dd>
+      <div><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object">object</a></div>
+      <div><span class="xref">WebApiOptions</span></div>
+    </dd>
+  </dl>
+
+
+
+  <dl class="typelist inheritedMembers">
+    <dt>Inherited Members</dt>
+    <dd>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object)">object.Equals(object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.equals#system-object-equals(system-object-system-object)">object.Equals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gethashcode">object.GetHashCode()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.gettype">object.GetType()</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.referenceequals">object.ReferenceEquals(object, object)</a>
+    </div>
+    <div>
+      <a class="xref" href="https://learn.microsoft.com/dotnet/api/system.object.tostring">object.ToString()</a>
+    </div>
+  </dd></dl>
+
+
+
+
+
+
+  <h2 class="section" id="fields">Fields
+</h2>
+
+
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_SectionName" data-uid="Apq.Cfg.WebApi.WebApiOptions.SectionName">
+  SectionName
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>配置节名称,用于从 IConfiguration 绑定</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public const string SectionName = &quot;ApqCfg:WebApi&quot;</code></pre>
+  </div>
+
+
+
+
+  <h4 class="section">Field Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+  <h2 class="section" id="properties">Properties
+</h2>
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_AllowDelete_" data-uid="Apq.Cfg.WebApi.WebApiOptions.AllowDelete*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_AllowDelete" data-uid="Apq.Cfg.WebApi.WebApiOptions.AllowDelete">
+  AllowDelete
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否允许删除配置,默认 false</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool AllowDelete { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_AllowRead_" data-uid="Apq.Cfg.WebApi.WebApiOptions.AllowRead*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_AllowRead" data-uid="Apq.Cfg.WebApi.WebApiOptions.AllowRead">
+  AllowRead
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否允许读取配置,默认 true</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool AllowRead { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_AllowWrite_" data-uid="Apq.Cfg.WebApi.WebApiOptions.AllowWrite*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_AllowWrite" data-uid="Apq.Cfg.WebApi.WebApiOptions.AllowWrite">
+  AllowWrite
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否允许写入配置,默认 false</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool AllowWrite { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_ApiKey_" data-uid="Apq.Cfg.WebApi.WebApiOptions.ApiKey*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_ApiKey" data-uid="Apq.Cfg.WebApi.WebApiOptions.ApiKey">
+  ApiKey
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>API Key(当 Authentication 为 ApiKey 时使用)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string? ApiKey { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_ApiKeyHeaderName_" data-uid="Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_ApiKeyHeaderName" data-uid="Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName">
+  ApiKeyHeaderName
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>API Key 请求头名称,默认 &quot;X-Api-Key&quot;</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string ApiKeyHeaderName { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_Authentication_" data-uid="Apq.Cfg.WebApi.WebApiOptions.Authentication*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_Authentication" data-uid="Apq.Cfg.WebApi.WebApiOptions.Authentication">
+  Authentication
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>认证方式,默认无认证</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public AuthenticationType Authentication { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.AuthenticationType.html">AuthenticationType</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_CorsOrigins_" data-uid="Apq.Cfg.WebApi.WebApiOptions.CorsOrigins*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_CorsOrigins" data-uid="Apq.Cfg.WebApi.WebApiOptions.CorsOrigins">
+  CorsOrigins
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>CORS 允许的源</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string[] CorsOrigins { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>[]</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_EnableCors_" data-uid="Apq.Cfg.WebApi.WebApiOptions.EnableCors*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_EnableCors" data-uid="Apq.Cfg.WebApi.WebApiOptions.EnableCors">
+  EnableCors
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否启用 CORS,默认 false</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool EnableCors { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_Enabled_" data-uid="Apq.Cfg.WebApi.WebApiOptions.Enabled*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_Enabled" data-uid="Apq.Cfg.WebApi.WebApiOptions.Enabled">
+  Enabled
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否启用 API,默认 true</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool Enabled { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_Jwt_" data-uid="Apq.Cfg.WebApi.WebApiOptions.Jwt*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_Jwt" data-uid="Apq.Cfg.WebApi.WebApiOptions.Jwt">
+  Jwt
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>JWT 配置(当 Authentication 为 JwtBearer 时使用)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public JwtOptions? Jwt { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="Apq.Cfg.WebApi.JwtOptions.html">JwtOptions</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_MaskSensitiveValues_" data-uid="Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_MaskSensitiveValues" data-uid="Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues">
+  MaskSensitiveValues
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>是否脱敏敏感值,默认 true</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public bool MaskSensitiveValues { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.boolean">bool</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_RoutePrefix_" data-uid="Apq.Cfg.WebApi.WebApiOptions.RoutePrefix*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_RoutePrefix" data-uid="Apq.Cfg.WebApi.WebApiOptions.RoutePrefix">
+  RoutePrefix
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>API 路由前缀,默认 &quot;/api/apqcfg&quot;</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string RoutePrefix { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a></dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+  <a id="Apq_Cfg_WebApi_WebApiOptions_SensitiveKeyPatterns_" data-uid="Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns*"></a>
+
+  <h3 id="Apq_Cfg_WebApi_WebApiOptions_SensitiveKeyPatterns" data-uid="Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns">
+  SensitiveKeyPatterns
+  
+  </h3>
+
+  <div class="markdown level1 summary"><p>敏感键模式(支持通配符)</p>
+</div>
+  <div class="markdown level1 conceptual"></div>
+
+  <div class="codewrapper">
+    <pre><code class="lang-csharp hljs">public string[] SensitiveKeyPatterns { get; set; }</code></pre>
+  </div>
+
+
+
+
+
+  <h4 class="section">Property Value</h4>
+  <dl class="parameters">
+    <dt><a class="xref" href="https://learn.microsoft.com/dotnet/api/system.string">string</a>[]</dt>
+    <dd></dd>
+  </dl>
+
+
+
+
+
+
+
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 148 - 0
docs/site/public/api-reference/api/Apq.Cfg.WebApi.html

@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <meta charset="utf-8">
+      <title>Namespace Apq.Cfg.WebApi | Apq.Cfg API </title>
+      <meta name="viewport" content="width=device-width, initial-scale=1.0">
+      <meta name="title" content="Namespace Apq.Cfg.WebApi | Apq.Cfg API ">
+      
+      
+      <link rel="icon" href="../favicon.svg">
+      <link rel="stylesheet" href="../public/docfx.min.css">
+      <link rel="stylesheet" href="../public/main.css">
+      <meta name="docfx:navrel" content="../toc.html">
+      <meta name="docfx:tocrel" content="toc.html">
+      
+      <meta name="docfx:rel" content="../">
+      
+      
+      
+      <meta name="loc:inThisArticle" content="In this article">
+      <meta name="loc:searchResultsCount" content="{count} results for &quot;{query}&quot;">
+      <meta name="loc:searchNoResults" content="No results for &quot;{query}&quot;">
+      <meta name="loc:tocFilter" content="Filter by title">
+      <meta name="loc:nextArticle" content="Next">
+      <meta name="loc:prevArticle" content="Previous">
+      <meta name="loc:themeLight" content="Light">
+      <meta name="loc:themeDark" content="Dark">
+      <meta name="loc:themeAuto" content="Auto">
+      <meta name="loc:changeTheme" content="Change theme">
+      <meta name="loc:copy" content="Copy">
+      <meta name="loc:downloadPdf" content="Download PDF">
+
+      <script type="module" src="./../public/docfx.min.js"></script>
+
+      <script>
+        const theme = localStorage.getItem('theme') || 'auto'
+        document.documentElement.setAttribute('data-bs-theme', theme === 'auto' ? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : theme)
+      </script>
+
+  </head>
+
+  <body class="tex2jax_ignore" data-layout="" data-yaml-mime="ManagedReference">
+    <header class="bg-body border-bottom">
+      <nav id="autocollapse" class="navbar navbar-expand-md" role="navigation">
+        <div class="container-xxl flex-nowrap">
+          <a class="navbar-brand" href="../index.html">
+            <img id="logo" class="svg" src="../images/logo-small.svg" alt="Apq.Cfg">
+            Apq.Cfg
+          </a>
+          <button class="btn btn-lg d-md-none border-0" type="button" data-bs-toggle="collapse" data-bs-target="#navpanel" aria-controls="navpanel" aria-expanded="false" aria-label="Toggle navigation">
+            <i class="bi bi-three-dots"></i>
+          </button>
+          <div class="collapse navbar-collapse" id="navpanel">
+            <div id="navbar">
+              <form class="search" role="search" id="search">
+                <i class="bi bi-search"></i>
+                <input class="form-control" id="search-query" type="search" disabled placeholder="Search" autocomplete="off" aria-label="Search">
+              </form>
+            </div>
+          </div>
+        </div>
+      </nav>
+    </header>
+
+    <main class="container-xxl">
+      <div class="toc-offcanvas">
+        <div class="offcanvas-md offcanvas-start" tabindex="-1" id="tocOffcanvas" aria-labelledby="tocOffcanvasLabel">
+          <div class="offcanvas-header">
+            <h5 class="offcanvas-title" id="tocOffcanvasLabel">Table of Contents</h5>
+            <button type="button" class="btn-close" data-bs-dismiss="offcanvas" data-bs-target="#tocOffcanvas" aria-label="Close"></button>
+          </div>
+          <div class="offcanvas-body">
+            <nav class="toc" id="toc"></nav>
+          </div>
+        </div>
+      </div>
+
+      <div class="content">
+        <div class="actionbar">
+          <button class="btn btn-lg border-0 d-md-none" type="button" data-bs-toggle="offcanvas" data-bs-target="#tocOffcanvas" aria-controls="tocOffcanvas" aria-expanded="false" aria-label="Show table of contents">
+            <i class="bi bi-list"></i>
+          </button>
+
+          <nav id="breadcrumb"></nav>
+        </div>
+
+        <article data-uid="Apq.Cfg.WebApi">
+
+  <h1 id="Apq_Cfg_WebApi" data-uid="Apq.Cfg.WebApi" class="text-break">Namespace Apq.Cfg.WebApi</h1>
+  <div class="markdown level0 summary"></div>
+  <div class="markdown level0 conceptual"></div>
+  <div class="markdown level0 remarks"></div>
+
+    <h3 id="classes">
+Classes
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.ApplicationBuilderExtensions.html">ApplicationBuilderExtensions</a></dt>
+      <dd><p>应用程序构建器扩展方法</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.JwtOptions.html">JwtOptions</a></dt>
+      <dd><p>JWT 认证配置选项</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.ServiceCollectionExtensions.html">ServiceCollectionExtensions</a></dt>
+      <dd><p>服务集合扩展方法</p>
+</dd>
+    </dl>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.WebApiOptions.html">WebApiOptions</a></dt>
+      <dd><p>Web API 配置选项</p>
+</dd>
+    </dl>
+    <h3 id="enums">
+Enums
+</h3>
+    <dl class="jumplist">
+      <dt><a class="xref" href="Apq.Cfg.WebApi.AuthenticationType.html">AuthenticationType</a></dt>
+      <dd><p>认证类型</p>
+</dd>
+    </dl>
+
+
+</article>
+
+
+
+      </div>
+
+      <div class="affix">
+        <nav id="affix"></nav>
+      </div>
+    </main>
+
+    <div class="container-xxl search-results" id="search-results"></div>
+
+    <footer class="border-top text-secondary">
+      <div class="container-xxl">
+        <div class="flex-fill">
+          Apq.Cfg - .NET 统一配置组件库 (基于 .NET 10.0,兼容 .NET 8.0)
+        </div>
+      </div>
+    </footer>
+  </body>
+</html>

+ 102 - 0
docs/site/public/api-reference/api/toc.html

@@ -350,9 +350,18 @@
                     <a href="Apq.Cfg.Sources.html" name="" title="Apq.Cfg.Sources">Apq.Cfg.Sources</a>
 
                     <ul class="nav level2">
+                          <li>
+                              <a href="Apq.Cfg.Sources.CfgSourceExtensions.html" name="" title="CfgSourceExtensions">CfgSourceExtensions</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.Sources.ConfigSourceInfo.html" name="" title="ConfigSourceInfo">ConfigSourceInfo</a>
+                          </li>
                           <li>
                               <a href="Apq.Cfg.Sources.ICfgSource.html" name="" title="ICfgSource">ICfgSource</a>
                           </li>
+                          <li>
+                              <a href="Apq.Cfg.Sources.IFileCfgSource.html" name="" title="IFileCfgSource">IFileCfgSource</a>
+                          </li>
                           <li>
                               <a href="Apq.Cfg.Sources.IWritableCfgSource.html" name="" title="IWritableCfgSource">IWritableCfgSource</a>
                           </li>
@@ -478,6 +487,99 @@
                           </li>
                     </ul>
                 </li>
+                <li>
+                    <span class="expand-stub"></span>
+                    <a href="Apq.Cfg.WebApi.html" name="" title="Apq.Cfg.WebApi">Apq.Cfg.WebApi</a>
+
+                    <ul class="nav level2">
+                          <li>
+                              <a href="Apq.Cfg.WebApi.ApplicationBuilderExtensions.html" name="" title="ApplicationBuilderExtensions">ApplicationBuilderExtensions</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.AuthenticationType.html" name="" title="AuthenticationType">AuthenticationType</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.JwtOptions.html" name="" title="JwtOptions">JwtOptions</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.ServiceCollectionExtensions.html" name="" title="ServiceCollectionExtensions">ServiceCollectionExtensions</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.WebApiOptions.html" name="" title="WebApiOptions">WebApiOptions</a>
+                          </li>
+                    </ul>
+                </li>
+                <li>
+                    <span class="expand-stub"></span>
+                    <a href="Apq.Cfg.WebApi.Authentication.html" name="" title="Apq.Cfg.WebApi.Authentication">Apq.Cfg.WebApi.Authentication</a>
+
+                    <ul class="nav level2">
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html" name="" title="ApiKeyAuthenticationHandler">ApiKeyAuthenticationHandler</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html" name="" title="ApiKeyAuthenticationOptions">ApiKeyAuthenticationOptions</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.html" name="" title="ApiKeyDefaults">ApiKeyDefaults</a>
+                          </li>
+                    </ul>
+                </li>
+                <li>
+                    <span class="expand-stub"></span>
+                    <a href="Apq.Cfg.WebApi.Controllers.html" name="" title="Apq.Cfg.WebApi.Controllers">Apq.Cfg.WebApi.Controllers</a>
+
+                    <ul class="nav level2">
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Controllers.ConfigController.html" name="" title="ConfigController">ConfigController</a>
+                          </li>
+                    </ul>
+                </li>
+                <li>
+                    <span class="expand-stub"></span>
+                    <a href="Apq.Cfg.WebApi.Middleware.html" name="" title="Apq.Cfg.WebApi.Middleware">Apq.Cfg.WebApi.Middleware</a>
+
+                    <ul class="nav level2">
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html" name="" title="ConfigApiMiddleware">ConfigApiMiddleware</a>
+                          </li>
+                    </ul>
+                </li>
+                <li>
+                    <span class="expand-stub"></span>
+                    <a href="Apq.Cfg.WebApi.Models.html" name="" title="Apq.Cfg.WebApi.Models">Apq.Cfg.WebApi.Models</a>
+
+                    <ul class="nav level2">
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Models.ApiResponse.html" name="" title="ApiResponse">ApiResponse</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Models.ApiResponse-1.html" name="" title="ApiResponse&lt;T&gt;">ApiResponse&lt;T&gt;</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Models.BatchUpdateRequest.html" name="" title="BatchUpdateRequest">BatchUpdateRequest</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Models.ConfigTreeNode.html" name="" title="ConfigTreeNode">ConfigTreeNode</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Models.ConfigValueResponse.html" name="" title="ConfigValueResponse">ConfigValueResponse</a>
+                          </li>
+                    </ul>
+                </li>
+                <li>
+                    <span class="expand-stub"></span>
+                    <a href="Apq.Cfg.WebApi.Services.html" name="" title="Apq.Cfg.WebApi.Services">Apq.Cfg.WebApi.Services</a>
+
+                    <ul class="nav level2">
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Services.ConfigApiService.html" name="" title="ConfigApiService">ConfigApiService</a>
+                          </li>
+                          <li>
+                              <a href="Apq.Cfg.WebApi.Services.IConfigApiService.html" name="" title="IConfigApiService">IConfigApiService</a>
+                          </li>
+                    </ul>
+                </li>
                 <li>
                     <span class="expand-stub"></span>
                     <a href="Apq.Cfg.Xml.html" name="" title="Apq.Cfg.Xml">Apq.Cfg.Xml</a>

File diff suppressed because it is too large
+ 0 - 0
docs/site/public/api-reference/api/toc.json


File diff suppressed because it is too large
+ 0 - 0
docs/site/public/api-reference/index.json


+ 364 - 0
docs/site/public/api-reference/manifest.json

@@ -1220,6 +1220,34 @@
       "Title": "Apq.Cfg.SourceGenerator",
       "Summary": null
     },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.Sources.CfgSourceExtensions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.Sources.CfgSourceExtensions.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.Sources.CfgSourceExtensions",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.Sources.CfgSourceExtensions.yml\" sourcestartlinenumber=\"1\">ICfgSource 扩展方法</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.Sources.ConfigSourceInfo.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.Sources.ConfigSourceInfo.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.Sources.ConfigSourceInfo",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.Sources.ConfigSourceInfo.yml\" sourcestartlinenumber=\"1\">配置源信息(用于序列化和 API 响应)</p>\n"
+    },
     {
       "type": "ManagedReference",
       "source_relative_path": "api/Apq.Cfg.Sources.File.FileCfgSourceBase.yml",
@@ -1262,6 +1290,20 @@
       "Title": "Apq.Cfg.Sources.ICfgSource",
       "Summary": "<p sourcefile=\"api/Apq.Cfg.Sources.ICfgSource.yml\" sourcestartlinenumber=\"1\">配置源接口,定义了配置源的基本行为</p>\n"
     },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.Sources.IFileCfgSource.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.Sources.IFileCfgSource.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.Sources.IFileCfgSource",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.Sources.IFileCfgSource.yml\" sourcestartlinenumber=\"1\">文件配置源接口,用于标识基于文件的配置源</p>\n"
+    },
     {
       "type": "ManagedReference",
       "source_relative_path": "api/Apq.Cfg.Sources.IWritableCfgSource.yml",
@@ -1724,6 +1766,328 @@
       "Title": "Apq.Cfg.Vault",
       "Summary": null
     },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.ApplicationBuilderExtensions",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.yml\" sourcestartlinenumber=\"1\">应用程序构建器扩展方法</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.yml\" sourcestartlinenumber=\"1\">API Key 认证处理器</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.yml\" sourcestartlinenumber=\"1\">API Key 认证选项</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Authentication.ApiKeyDefaults",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.yml\" sourcestartlinenumber=\"1\">API Key 认证方案常量</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Authentication.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Authentication.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Authentication",
+      "Summary": null
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.AuthenticationType.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.AuthenticationType.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.AuthenticationType",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.AuthenticationType.yml\" sourcestartlinenumber=\"1\">认证类型</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Controllers.ConfigController.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Controllers.ConfigController.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Controllers.ConfigController",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Controllers.ConfigController.yml\" sourcestartlinenumber=\"1\">配置 API 控制器</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Controllers.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Controllers.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Controllers",
+      "Summary": null
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.JwtOptions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.JwtOptions.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.JwtOptions",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.JwtOptions.yml\" sourcestartlinenumber=\"1\">JWT 认证配置选项</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.yml\" sourcestartlinenumber=\"1\">配置 API 启用检查中间件</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Middleware.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Middleware.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Middleware",
+      "Summary": null
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Models.ApiResponse-1.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Models.ApiResponse-1.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Models.ApiResponse<T>",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Models.ApiResponse-1.yml\" sourcestartlinenumber=\"1\">统一 API 响应格式</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Models.ApiResponse.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Models.ApiResponse.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Models.ApiResponse",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Models.ApiResponse.yml\" sourcestartlinenumber=\"1\">非泛型 API 响应</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Models.BatchUpdateRequest",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.yml\" sourcestartlinenumber=\"1\">批量更新请求</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Models.ConfigTreeNode.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Models.ConfigTreeNode",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Models.ConfigTreeNode.yml\" sourcestartlinenumber=\"1\">配置树节点</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Models.ConfigValueResponse.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Models.ConfigValueResponse",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Models.ConfigValueResponse.yml\" sourcestartlinenumber=\"1\">配置值响应</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Models.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Models.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Models",
+      "Summary": null
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.ServiceCollectionExtensions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.ServiceCollectionExtensions",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.ServiceCollectionExtensions.yml\" sourcestartlinenumber=\"1\">服务集合扩展方法</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Services.ConfigApiService.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Services.ConfigApiService.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Services.ConfigApiService",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Services.ConfigApiService.yml\" sourcestartlinenumber=\"1\">配置 API 服务实现</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Services.IConfigApiService.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Services.IConfigApiService.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Services.IConfigApiService",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.Services.IConfigApiService.yml\" sourcestartlinenumber=\"1\">配置 API 服务接口</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.Services.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.Services.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.Services",
+      "Summary": null
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.WebApiOptions.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.WebApiOptions.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi.WebApiOptions",
+      "Summary": "<p sourcefile=\"api/Apq.Cfg.WebApi.WebApiOptions.yml\" sourcestartlinenumber=\"1\">Web API 配置选项</p>\n"
+    },
+    {
+      "type": "ManagedReference",
+      "source_relative_path": "api/Apq.Cfg.WebApi.yml",
+      "output": {
+        ".html": {
+          "relative_path": "api/Apq.Cfg.WebApi.html"
+        }
+      },
+      "version": "",
+      "Uid": null,
+      "IsMRef": true,
+      "Title": "Apq.Cfg.WebApi",
+      "Summary": null
+    },
     {
       "type": "ManagedReference",
       "source_relative_path": "api/Apq.Cfg.Xml.CfgBuilderExtensions.yml",

+ 2023 - 33
docs/site/public/api-reference/xrefmap.yml

@@ -197,15 +197,15 @@ references:
   commentId: T:Apq.Cfg.CfgBuilder
   fullName: Apq.Cfg.CfgBuilder
   nameWithType: CfgBuilder
-- uid: Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String)
-  name: AddEnvironmentVariables(int, string?)
-  href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddEnvironmentVariables_System_Int32_System_String_
-  commentId: M:Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String)
-  name.vb: AddEnvironmentVariables(Integer, String)
-  fullName: Apq.Cfg.CfgBuilder.AddEnvironmentVariables(int, string?)
-  fullName.vb: Apq.Cfg.CfgBuilder.AddEnvironmentVariables(Integer, String)
-  nameWithType: CfgBuilder.AddEnvironmentVariables(int, string?)
-  nameWithType.vb: CfgBuilder.AddEnvironmentVariables(Integer, String)
+- uid: Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String,System.String)
+  name: AddEnvironmentVariables(int, string?, string?)
+  href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddEnvironmentVariables_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.CfgBuilder.AddEnvironmentVariables(System.Int32,System.String,System.String)
+  name.vb: AddEnvironmentVariables(Integer, String, String)
+  fullName: Apq.Cfg.CfgBuilder.AddEnvironmentVariables(int, string?, string?)
+  fullName.vb: Apq.Cfg.CfgBuilder.AddEnvironmentVariables(Integer, String, String)
+  nameWithType: CfgBuilder.AddEnvironmentVariables(int, string?, string?)
+  nameWithType.vb: CfgBuilder.AddEnvironmentVariables(Integer, String, String)
 - uid: Apq.Cfg.CfgBuilder.AddEnvironmentVariables*
   name: AddEnvironmentVariables
   href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddEnvironmentVariables_
@@ -213,15 +213,15 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.CfgBuilder.AddEnvironmentVariables
   nameWithType: CfgBuilder.AddEnvironmentVariables
-- uid: Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)
-  name: AddJson(string, int, bool, bool, bool, bool, EncodingOptions?)
-  href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddJson_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_
-  commentId: M:Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)
-  name.vb: AddJson(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions)
-  fullName: Apq.Cfg.CfgBuilder.AddJson(string, int, bool, bool, bool, bool, Apq.Cfg.EncodingSupport.EncodingOptions?)
-  fullName.vb: Apq.Cfg.CfgBuilder.AddJson(String, Integer, Boolean, Boolean, Boolean, Boolean, Apq.Cfg.EncodingSupport.EncodingOptions)
-  nameWithType: CfgBuilder.AddJson(string, int, bool, bool, bool, bool, EncodingOptions?)
-  nameWithType.vb: CfgBuilder.AddJson(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions)
+- uid: Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)
+  name: AddJson(string, int, bool, bool, bool, bool, EncodingOptions?, string?)
+  href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddJson_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_System_String_
+  commentId: M:Apq.Cfg.CfgBuilder.AddJson(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)
+  name.vb: AddJson(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions, String)
+  fullName: Apq.Cfg.CfgBuilder.AddJson(string, int, bool, bool, bool, bool, Apq.Cfg.EncodingSupport.EncodingOptions?, string?)
+  fullName.vb: Apq.Cfg.CfgBuilder.AddJson(String, Integer, Boolean, Boolean, Boolean, Boolean, Apq.Cfg.EncodingSupport.EncodingOptions, String)
+  nameWithType: CfgBuilder.AddJson(string, int, bool, bool, bool, bool, EncodingOptions?, string?)
+  nameWithType.vb: CfgBuilder.AddJson(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions, String)
 - uid: Apq.Cfg.CfgBuilder.AddJson*
   name: AddJson
   href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddJson_
@@ -277,12 +277,15 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.CfgBuilder.AddReadEncodingMappingWildcard
   nameWithType: CfgBuilder.AddReadEncodingMappingWildcard
-- uid: Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource)
-  name: AddSource(ICfgSource)
-  href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddSource_Apq_Cfg_Sources_ICfgSource_
-  commentId: M:Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource)
-  fullName: Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource)
-  nameWithType: CfgBuilder.AddSource(ICfgSource)
+- uid: Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource,System.String)
+  name: AddSource(ICfgSource, string?)
+  href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddSource_Apq_Cfg_Sources_ICfgSource_System_String_
+  commentId: M:Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource,System.String)
+  name.vb: AddSource(ICfgSource, String)
+  fullName: Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource, string?)
+  fullName.vb: Apq.Cfg.CfgBuilder.AddSource(Apq.Cfg.Sources.ICfgSource, String)
+  nameWithType: CfgBuilder.AddSource(ICfgSource, string?)
+  nameWithType.vb: CfgBuilder.AddSource(ICfgSource, String)
 - uid: Apq.Cfg.CfgBuilder.AddSource*
   name: AddSource
   href: api/Apq.Cfg.CfgBuilder.html#Apq_Cfg_CfgBuilder_AddSource_
@@ -3959,6 +3962,35 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.ICfgRoot.GetSection
   nameWithType: ICfgRoot.GetSection
+- uid: Apq.Cfg.ICfgRoot.GetSource(System.Int32,System.String)
+  name: GetSource(int, string)
+  href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_GetSource_System_Int32_System_String_
+  commentId: M:Apq.Cfg.ICfgRoot.GetSource(System.Int32,System.String)
+  name.vb: GetSource(Integer, String)
+  fullName: Apq.Cfg.ICfgRoot.GetSource(int, string)
+  fullName.vb: Apq.Cfg.ICfgRoot.GetSource(Integer, String)
+  nameWithType: ICfgRoot.GetSource(int, string)
+  nameWithType.vb: ICfgRoot.GetSource(Integer, String)
+- uid: Apq.Cfg.ICfgRoot.GetSource*
+  name: GetSource
+  href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_GetSource_
+  commentId: Overload:Apq.Cfg.ICfgRoot.GetSource
+  isSpec: "True"
+  fullName: Apq.Cfg.ICfgRoot.GetSource
+  nameWithType: ICfgRoot.GetSource
+- uid: Apq.Cfg.ICfgRoot.GetSources
+  name: GetSources()
+  href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_GetSources
+  commentId: M:Apq.Cfg.ICfgRoot.GetSources
+  fullName: Apq.Cfg.ICfgRoot.GetSources()
+  nameWithType: ICfgRoot.GetSources()
+- uid: Apq.Cfg.ICfgRoot.GetSources*
+  name: GetSources
+  href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_GetSources_
+  commentId: Overload:Apq.Cfg.ICfgRoot.GetSources
+  isSpec: "True"
+  fullName: Apq.Cfg.ICfgRoot.GetSources
+  nameWithType: ICfgRoot.GetSources
 - uid: Apq.Cfg.ICfgRoot.GetValue*
   name: GetValue
   href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_GetValue_
@@ -3994,6 +4026,19 @@ references:
   fullName.vb: Apq.Cfg.ICfgRoot.this[]
   nameWithType: ICfgRoot.this
   nameWithType.vb: ICfgRoot.this[]
+- uid: Apq.Cfg.ICfgRoot.Reload
+  name: Reload()
+  href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_Reload
+  commentId: M:Apq.Cfg.ICfgRoot.Reload
+  fullName: Apq.Cfg.ICfgRoot.Reload()
+  nameWithType: ICfgRoot.Reload()
+- uid: Apq.Cfg.ICfgRoot.Reload*
+  name: Reload
+  href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_Reload_
+  commentId: Overload:Apq.Cfg.ICfgRoot.Reload
+  isSpec: "True"
+  fullName: Apq.Cfg.ICfgRoot.Reload
+  nameWithType: ICfgRoot.Reload
 - uid: Apq.Cfg.ICfgRoot.Remove(System.String,System.Nullable{System.Int32})
   name: Remove(string, int?)
   href: api/Apq.Cfg.ICfgRoot.html#Apq_Cfg_ICfgRoot_Remove_System_String_System_Nullable_System_Int32__
@@ -5416,6 +5461,122 @@ references:
   commentId: N:Apq.Cfg.Sources
   fullName: Apq.Cfg.Sources
   nameWithType: Apq.Cfg.Sources
+- uid: Apq.Cfg.Sources.CfgSourceExtensions
+  name: CfgSourceExtensions
+  href: api/Apq.Cfg.Sources.CfgSourceExtensions.html
+  commentId: T:Apq.Cfg.Sources.CfgSourceExtensions
+  fullName: Apq.Cfg.Sources.CfgSourceExtensions
+  nameWithType: CfgSourceExtensions
+- uid: Apq.Cfg.Sources.CfgSourceExtensions.ToInfo(Apq.Cfg.Sources.ICfgSource)
+  name: ToInfo(ICfgSource)
+  href: api/Apq.Cfg.Sources.CfgSourceExtensions.html#Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_Apq_Cfg_Sources_ICfgSource_
+  commentId: M:Apq.Cfg.Sources.CfgSourceExtensions.ToInfo(Apq.Cfg.Sources.ICfgSource)
+  fullName: Apq.Cfg.Sources.CfgSourceExtensions.ToInfo(Apq.Cfg.Sources.ICfgSource)
+  nameWithType: CfgSourceExtensions.ToInfo(ICfgSource)
+- uid: Apq.Cfg.Sources.CfgSourceExtensions.ToInfo*
+  name: ToInfo
+  href: api/Apq.Cfg.Sources.CfgSourceExtensions.html#Apq_Cfg_Sources_CfgSourceExtensions_ToInfo_
+  commentId: Overload:Apq.Cfg.Sources.CfgSourceExtensions.ToInfo
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.CfgSourceExtensions.ToInfo
+  nameWithType: CfgSourceExtensions.ToInfo
+- uid: Apq.Cfg.Sources.ConfigSourceInfo
+  name: ConfigSourceInfo
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html
+  commentId: T:Apq.Cfg.Sources.ConfigSourceInfo
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo
+  nameWithType: ConfigSourceInfo
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter
+  name: IsPrimaryWriter
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_IsPrimaryWriter
+  commentId: P:Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter
+  nameWithType: ConfigSourceInfo.IsPrimaryWriter
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter*
+  name: IsPrimaryWriter
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_IsPrimaryWriter_
+  commentId: Overload:Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.IsPrimaryWriter
+  nameWithType: ConfigSourceInfo.IsPrimaryWriter
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable
+  name: IsWriteable
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_IsWriteable
+  commentId: P:Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable
+  nameWithType: ConfigSourceInfo.IsWriteable
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable*
+  name: IsWriteable
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_IsWriteable_
+  commentId: Overload:Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.IsWriteable
+  nameWithType: ConfigSourceInfo.IsWriteable
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.KeyCount
+  name: KeyCount
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_KeyCount
+  commentId: P:Apq.Cfg.Sources.ConfigSourceInfo.KeyCount
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.KeyCount
+  nameWithType: ConfigSourceInfo.KeyCount
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.KeyCount*
+  name: KeyCount
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_KeyCount_
+  commentId: Overload:Apq.Cfg.Sources.ConfigSourceInfo.KeyCount
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.KeyCount
+  nameWithType: ConfigSourceInfo.KeyCount
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.Level
+  name: Level
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_Level
+  commentId: P:Apq.Cfg.Sources.ConfigSourceInfo.Level
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.Level
+  nameWithType: ConfigSourceInfo.Level
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.Level*
+  name: Level
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_Level_
+  commentId: Overload:Apq.Cfg.Sources.ConfigSourceInfo.Level
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.Level
+  nameWithType: ConfigSourceInfo.Level
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.Name
+  name: Name
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_Name
+  commentId: P:Apq.Cfg.Sources.ConfigSourceInfo.Name
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.Name
+  nameWithType: ConfigSourceInfo.Name
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.Name*
+  name: Name
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_Name_
+  commentId: Overload:Apq.Cfg.Sources.ConfigSourceInfo.Name
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.Name
+  nameWithType: ConfigSourceInfo.Name
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount
+  name: TopLevelKeyCount
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_TopLevelKeyCount
+  commentId: P:Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount
+  nameWithType: ConfigSourceInfo.TopLevelKeyCount
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount*
+  name: TopLevelKeyCount
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_TopLevelKeyCount_
+  commentId: Overload:Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.TopLevelKeyCount
+  nameWithType: ConfigSourceInfo.TopLevelKeyCount
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.Type
+  name: Type
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_Type
+  commentId: P:Apq.Cfg.Sources.ConfigSourceInfo.Type
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.Type
+  nameWithType: ConfigSourceInfo.Type
+- uid: Apq.Cfg.Sources.ConfigSourceInfo.Type*
+  name: Type
+  href: api/Apq.Cfg.Sources.ConfigSourceInfo.html#Apq_Cfg_Sources_ConfigSourceInfo_Type_
+  commentId: Overload:Apq.Cfg.Sources.ConfigSourceInfo.Type
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ConfigSourceInfo.Type
+  nameWithType: ConfigSourceInfo.Type
 - uid: Apq.Cfg.Sources.File
   name: Apq.Cfg.Sources.File
   href: api/Apq.Cfg.Sources.File.html
@@ -5428,15 +5589,15 @@ references:
   commentId: T:Apq.Cfg.Sources.File.FileCfgSourceBase
   fullName: Apq.Cfg.Sources.File.FileCfgSourceBase
   nameWithType: FileCfgSourceBase
-- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)
-  name: FileCfgSourceBase(string, int, bool, bool, bool, bool, EncodingOptions?)
-  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase__ctor_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_
-  commentId: M:Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions)
-  name.vb: New(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions)
-  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.FileCfgSourceBase(string, int, bool, bool, bool, bool, Apq.Cfg.EncodingSupport.EncodingOptions?)
-  fullName.vb: Apq.Cfg.Sources.File.FileCfgSourceBase.New(String, Integer, Boolean, Boolean, Boolean, Boolean, Apq.Cfg.EncodingSupport.EncodingOptions)
-  nameWithType: FileCfgSourceBase.FileCfgSourceBase(string, int, bool, bool, bool, bool, EncodingOptions?)
-  nameWithType.vb: FileCfgSourceBase.New(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions)
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)
+  name: FileCfgSourceBase(string, int, bool, bool, bool, bool, EncodingOptions?, string?)
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase__ctor_System_String_System_Int32_System_Boolean_System_Boolean_System_Boolean_System_Boolean_Apq_Cfg_EncodingSupport_EncodingOptions_System_String_
+  commentId: M:Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor(System.String,System.Int32,System.Boolean,System.Boolean,System.Boolean,System.Boolean,Apq.Cfg.EncodingSupport.EncodingOptions,System.String)
+  name.vb: New(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions, String)
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.FileCfgSourceBase(string, int, bool, bool, bool, bool, Apq.Cfg.EncodingSupport.EncodingOptions?, string?)
+  fullName.vb: Apq.Cfg.Sources.File.FileCfgSourceBase.New(String, Integer, Boolean, Boolean, Boolean, Boolean, Apq.Cfg.EncodingSupport.EncodingOptions, String)
+  nameWithType: FileCfgSourceBase.FileCfgSourceBase(string, int, bool, bool, bool, bool, EncodingOptions?, string?)
+  nameWithType.vb: FileCfgSourceBase.New(String, Integer, Boolean, Boolean, Boolean, Boolean, EncodingOptions, String)
 - uid: Apq.Cfg.Sources.File.FileCfgSourceBase.#ctor*
   name: FileCfgSourceBase
   href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase__ctor_
@@ -5560,6 +5721,32 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.EnsureDirectoryFor
   nameWithType: FileCfgSourceBase.EnsureDirectoryFor
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath
+  name: FilePath
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_FilePath
+  commentId: P:Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath
+  nameWithType: FileCfgSourceBase.FilePath
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath*
+  name: FilePath
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_FilePath_
+  commentId: Overload:Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.FilePath
+  nameWithType: FileCfgSourceBase.FilePath
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues
+  name: GetAllValues()
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_GetAllValues
+  commentId: M:Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues()
+  nameWithType: FileCfgSourceBase.GetAllValues()
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues*
+  name: GetAllValues
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_GetAllValues_
+  commentId: Overload:Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.GetAllValues
+  nameWithType: FileCfgSourceBase.GetAllValues
 - uid: Apq.Cfg.Sources.File.FileCfgSourceBase.GetWriteEncoding
   name: GetWriteEncoding()
   href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_GetWriteEncoding
@@ -5599,6 +5786,19 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.IsWriteable
   nameWithType: FileCfgSourceBase.IsWriteable
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount
+  name: KeyCount
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_KeyCount
+  commentId: P:Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount
+  nameWithType: FileCfgSourceBase.KeyCount
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount*
+  name: KeyCount
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_KeyCount_
+  commentId: Overload:Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.KeyCount
+  nameWithType: FileCfgSourceBase.KeyCount
 - uid: Apq.Cfg.Sources.File.FileCfgSourceBase.Level
   name: Level
   href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_Level
@@ -5612,6 +5812,45 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.Level
   nameWithType: FileCfgSourceBase.Level
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.Name
+  name: Name
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_Name
+  commentId: P:Apq.Cfg.Sources.File.FileCfgSourceBase.Name
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.Name
+  nameWithType: FileCfgSourceBase.Name
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.Name*
+  name: Name
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_Name_
+  commentId: Overload:Apq.Cfg.Sources.File.FileCfgSourceBase.Name
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.Name
+  nameWithType: FileCfgSourceBase.Name
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount
+  name: TopLevelKeyCount
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_TopLevelKeyCount
+  commentId: P:Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount
+  nameWithType: FileCfgSourceBase.TopLevelKeyCount
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount*
+  name: TopLevelKeyCount
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_TopLevelKeyCount_
+  commentId: Overload:Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.TopLevelKeyCount
+  nameWithType: FileCfgSourceBase.TopLevelKeyCount
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.Type
+  name: Type
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_Type
+  commentId: P:Apq.Cfg.Sources.File.FileCfgSourceBase.Type
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.Type
+  nameWithType: FileCfgSourceBase.Type
+- uid: Apq.Cfg.Sources.File.FileCfgSourceBase.Type*
+  name: Type
+  href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase_Type_
+  commentId: Overload:Apq.Cfg.Sources.File.FileCfgSourceBase.Type
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.File.FileCfgSourceBase.Type
+  nameWithType: FileCfgSourceBase.Type
 - uid: Apq.Cfg.Sources.File.FileCfgSourceBase._encodingOptions
   name: _encodingOptions
   href: api/Apq.Cfg.Sources.File.FileCfgSourceBase.html#Apq_Cfg_Sources_File_FileCfgSourceBase__encodingOptions
@@ -5655,6 +5894,19 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.Sources.ICfgSource.BuildSource
   nameWithType: ICfgSource.BuildSource
+- uid: Apq.Cfg.Sources.ICfgSource.GetAllValues
+  name: GetAllValues()
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_GetAllValues
+  commentId: M:Apq.Cfg.Sources.ICfgSource.GetAllValues
+  fullName: Apq.Cfg.Sources.ICfgSource.GetAllValues()
+  nameWithType: ICfgSource.GetAllValues()
+- uid: Apq.Cfg.Sources.ICfgSource.GetAllValues*
+  name: GetAllValues
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_GetAllValues_
+  commentId: Overload:Apq.Cfg.Sources.ICfgSource.GetAllValues
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ICfgSource.GetAllValues
+  nameWithType: ICfgSource.GetAllValues
 - uid: Apq.Cfg.Sources.ICfgSource.IsPrimaryWriter
   name: IsPrimaryWriter
   href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_IsPrimaryWriter
@@ -5681,6 +5933,19 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.Sources.ICfgSource.IsWriteable
   nameWithType: ICfgSource.IsWriteable
+- uid: Apq.Cfg.Sources.ICfgSource.KeyCount
+  name: KeyCount
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_KeyCount
+  commentId: P:Apq.Cfg.Sources.ICfgSource.KeyCount
+  fullName: Apq.Cfg.Sources.ICfgSource.KeyCount
+  nameWithType: ICfgSource.KeyCount
+- uid: Apq.Cfg.Sources.ICfgSource.KeyCount*
+  name: KeyCount
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_KeyCount_
+  commentId: Overload:Apq.Cfg.Sources.ICfgSource.KeyCount
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ICfgSource.KeyCount
+  nameWithType: ICfgSource.KeyCount
 - uid: Apq.Cfg.Sources.ICfgSource.Level
   name: Level
   href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Level
@@ -5694,6 +5959,64 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.Sources.ICfgSource.Level
   nameWithType: ICfgSource.Level
+- uid: Apq.Cfg.Sources.ICfgSource.Name
+  name: Name
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Name
+  commentId: P:Apq.Cfg.Sources.ICfgSource.Name
+  fullName: Apq.Cfg.Sources.ICfgSource.Name
+  nameWithType: ICfgSource.Name
+- uid: Apq.Cfg.Sources.ICfgSource.Name*
+  name: Name
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Name_
+  commentId: Overload:Apq.Cfg.Sources.ICfgSource.Name
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ICfgSource.Name
+  nameWithType: ICfgSource.Name
+- uid: Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount
+  name: TopLevelKeyCount
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_TopLevelKeyCount
+  commentId: P:Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount
+  fullName: Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount
+  nameWithType: ICfgSource.TopLevelKeyCount
+- uid: Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount*
+  name: TopLevelKeyCount
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_TopLevelKeyCount_
+  commentId: Overload:Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ICfgSource.TopLevelKeyCount
+  nameWithType: ICfgSource.TopLevelKeyCount
+- uid: Apq.Cfg.Sources.ICfgSource.Type
+  name: Type
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Type
+  commentId: P:Apq.Cfg.Sources.ICfgSource.Type
+  fullName: Apq.Cfg.Sources.ICfgSource.Type
+  nameWithType: ICfgSource.Type
+- uid: Apq.Cfg.Sources.ICfgSource.Type*
+  name: Type
+  href: api/Apq.Cfg.Sources.ICfgSource.html#Apq_Cfg_Sources_ICfgSource_Type_
+  commentId: Overload:Apq.Cfg.Sources.ICfgSource.Type
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.ICfgSource.Type
+  nameWithType: ICfgSource.Type
+- uid: Apq.Cfg.Sources.IFileCfgSource
+  name: IFileCfgSource
+  href: api/Apq.Cfg.Sources.IFileCfgSource.html
+  commentId: T:Apq.Cfg.Sources.IFileCfgSource
+  fullName: Apq.Cfg.Sources.IFileCfgSource
+  nameWithType: IFileCfgSource
+- uid: Apq.Cfg.Sources.IFileCfgSource.FilePath
+  name: FilePath
+  href: api/Apq.Cfg.Sources.IFileCfgSource.html#Apq_Cfg_Sources_IFileCfgSource_FilePath
+  commentId: P:Apq.Cfg.Sources.IFileCfgSource.FilePath
+  fullName: Apq.Cfg.Sources.IFileCfgSource.FilePath
+  nameWithType: IFileCfgSource.FilePath
+- uid: Apq.Cfg.Sources.IFileCfgSource.FilePath*
+  name: FilePath
+  href: api/Apq.Cfg.Sources.IFileCfgSource.html#Apq_Cfg_Sources_IFileCfgSource_FilePath_
+  commentId: Overload:Apq.Cfg.Sources.IFileCfgSource.FilePath
+  isSpec: "True"
+  fullName: Apq.Cfg.Sources.IFileCfgSource.FilePath
+  nameWithType: IFileCfgSource.FilePath
 - uid: Apq.Cfg.Sources.IWritableCfgSource
   name: IWritableCfgSource
   href: api/Apq.Cfg.Sources.IWritableCfgSource.html
@@ -7904,6 +8227,1673 @@ references:
   isSpec: "True"
   fullName: Apq.Cfg.Vault.VaultCfgOptions.Username
   nameWithType: VaultCfgOptions.Username
+- uid: Apq.Cfg.WebApi
+  name: Apq.Cfg.WebApi
+  href: api/Apq.Cfg.WebApi.html
+  commentId: N:Apq.Cfg.WebApi
+  fullName: Apq.Cfg.WebApi
+  nameWithType: Apq.Cfg.WebApi
+- uid: Apq.Cfg.WebApi.ApplicationBuilderExtensions
+  name: ApplicationBuilderExtensions
+  href: api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html
+  commentId: T:Apq.Cfg.WebApi.ApplicationBuilderExtensions
+  fullName: Apq.Cfg.WebApi.ApplicationBuilderExtensions
+  nameWithType: ApplicationBuilderExtensions
+- uid: Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi(Microsoft.AspNetCore.Routing.IEndpointRouteBuilder)
+  name: MapApqCfgWebApi(IEndpointRouteBuilder)
+  href: api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html#Apq_Cfg_WebApi_ApplicationBuilderExtensions_MapApqCfgWebApi_Microsoft_AspNetCore_Routing_IEndpointRouteBuilder_
+  commentId: M:Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi(Microsoft.AspNetCore.Routing.IEndpointRouteBuilder)
+  fullName: Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi(Microsoft.AspNetCore.Routing.IEndpointRouteBuilder)
+  nameWithType: ApplicationBuilderExtensions.MapApqCfgWebApi(IEndpointRouteBuilder)
+- uid: Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi*
+  name: MapApqCfgWebApi
+  href: api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html#Apq_Cfg_WebApi_ApplicationBuilderExtensions_MapApqCfgWebApi_
+  commentId: Overload:Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.ApplicationBuilderExtensions.MapApqCfgWebApi
+  nameWithType: ApplicationBuilderExtensions.MapApqCfgWebApi
+- uid: Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi(Microsoft.AspNetCore.Builder.IApplicationBuilder)
+  name: UseApqCfgWebApi(IApplicationBuilder)
+  href: api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html#Apq_Cfg_WebApi_ApplicationBuilderExtensions_UseApqCfgWebApi_Microsoft_AspNetCore_Builder_IApplicationBuilder_
+  commentId: M:Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi(Microsoft.AspNetCore.Builder.IApplicationBuilder)
+  fullName: Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi(Microsoft.AspNetCore.Builder.IApplicationBuilder)
+  nameWithType: ApplicationBuilderExtensions.UseApqCfgWebApi(IApplicationBuilder)
+- uid: Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi*
+  name: UseApqCfgWebApi
+  href: api/Apq.Cfg.WebApi.ApplicationBuilderExtensions.html#Apq_Cfg_WebApi_ApplicationBuilderExtensions_UseApqCfgWebApi_
+  commentId: Overload:Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.ApplicationBuilderExtensions.UseApqCfgWebApi
+  nameWithType: ApplicationBuilderExtensions.UseApqCfgWebApi
+- uid: Apq.Cfg.WebApi.Authentication
+  name: Apq.Cfg.WebApi.Authentication
+  href: api/Apq.Cfg.WebApi.Authentication.html
+  commentId: N:Apq.Cfg.WebApi.Authentication
+  fullName: Apq.Cfg.WebApi.Authentication
+  nameWithType: Apq.Cfg.WebApi.Authentication
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler
+  name: ApiKeyAuthenticationHandler
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html
+  commentId: T:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler
+  nameWithType: ApiKeyAuthenticationHandler
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.#ctor(Microsoft.Extensions.Options.IOptionsMonitor{Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions},Microsoft.Extensions.Logging.ILoggerFactory,System.Text.Encodings.Web.UrlEncoder)
+  name: ApiKeyAuthenticationHandler(IOptionsMonitor<ApiKeyAuthenticationOptions>, ILoggerFactory, UrlEncoder)
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler__ctor_Microsoft_Extensions_Options_IOptionsMonitor_Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions__Microsoft_Extensions_Logging_ILoggerFactory_System_Text_Encodings_Web_UrlEncoder_
+  commentId: M:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.#ctor(Microsoft.Extensions.Options.IOptionsMonitor{Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions},Microsoft.Extensions.Logging.ILoggerFactory,System.Text.Encodings.Web.UrlEncoder)
+  name.vb: New(IOptionsMonitor(Of ApiKeyAuthenticationOptions), ILoggerFactory, UrlEncoder)
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.ApiKeyAuthenticationHandler(Microsoft.Extensions.Options.IOptionsMonitor<Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions>, Microsoft.Extensions.Logging.ILoggerFactory, System.Text.Encodings.Web.UrlEncoder)
+  fullName.vb: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.New(Microsoft.Extensions.Options.IOptionsMonitor(Of Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions), Microsoft.Extensions.Logging.ILoggerFactory, System.Text.Encodings.Web.UrlEncoder)
+  nameWithType: ApiKeyAuthenticationHandler.ApiKeyAuthenticationHandler(IOptionsMonitor<ApiKeyAuthenticationOptions>, ILoggerFactory, UrlEncoder)
+  nameWithType.vb: ApiKeyAuthenticationHandler.New(IOptionsMonitor(Of ApiKeyAuthenticationOptions), ILoggerFactory, UrlEncoder)
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.#ctor*
+  name: ApiKeyAuthenticationHandler
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler__ctor_
+  commentId: Overload:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.ApiKeyAuthenticationHandler
+  fullName.vb: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.New
+  nameWithType: ApiKeyAuthenticationHandler.ApiKeyAuthenticationHandler
+  nameWithType.vb: ApiKeyAuthenticationHandler.New
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync
+  name: HandleAuthenticateAsync()
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler_HandleAuthenticateAsync
+  commentId: M:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync()
+  nameWithType: ApiKeyAuthenticationHandler.HandleAuthenticateAsync()
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync*
+  name: HandleAuthenticateAsync
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationHandler_HandleAuthenticateAsync_
+  commentId: Overload:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationHandler.HandleAuthenticateAsync
+  nameWithType: ApiKeyAuthenticationHandler.HandleAuthenticateAsync
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions
+  name: ApiKeyAuthenticationOptions
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html
+  commentId: T:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions
+  nameWithType: ApiKeyAuthenticationOptions
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey
+  name: ApiKey
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_ApiKey
+  commentId: P:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey
+  nameWithType: ApiKeyAuthenticationOptions.ApiKey
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey*
+  name: ApiKey
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_ApiKey_
+  commentId: Overload:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.ApiKey
+  nameWithType: ApiKeyAuthenticationOptions.ApiKey
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName
+  name: HeaderName
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_HeaderName
+  commentId: P:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName
+  nameWithType: ApiKeyAuthenticationOptions.HeaderName
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName*
+  name: HeaderName
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.html#Apq_Cfg_WebApi_Authentication_ApiKeyAuthenticationOptions_HeaderName_
+  commentId: Overload:Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyAuthenticationOptions.HeaderName
+  nameWithType: ApiKeyAuthenticationOptions.HeaderName
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyDefaults
+  name: ApiKeyDefaults
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.html
+  commentId: T:Apq.Cfg.WebApi.Authentication.ApiKeyDefaults
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyDefaults
+  nameWithType: ApiKeyDefaults
+- uid: Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.AuthenticationScheme
+  name: AuthenticationScheme
+  href: api/Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.html#Apq_Cfg_WebApi_Authentication_ApiKeyDefaults_AuthenticationScheme
+  commentId: F:Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.AuthenticationScheme
+  fullName: Apq.Cfg.WebApi.Authentication.ApiKeyDefaults.AuthenticationScheme
+  nameWithType: ApiKeyDefaults.AuthenticationScheme
+- uid: Apq.Cfg.WebApi.AuthenticationType
+  name: AuthenticationType
+  href: api/Apq.Cfg.WebApi.AuthenticationType.html
+  commentId: T:Apq.Cfg.WebApi.AuthenticationType
+  fullName: Apq.Cfg.WebApi.AuthenticationType
+  nameWithType: AuthenticationType
+- uid: Apq.Cfg.WebApi.AuthenticationType.ApiKey
+  name: ApiKey
+  href: api/Apq.Cfg.WebApi.AuthenticationType.html#Apq_Cfg_WebApi_AuthenticationType_ApiKey
+  commentId: F:Apq.Cfg.WebApi.AuthenticationType.ApiKey
+  fullName: Apq.Cfg.WebApi.AuthenticationType.ApiKey
+  nameWithType: AuthenticationType.ApiKey
+- uid: Apq.Cfg.WebApi.AuthenticationType.JwtBearer
+  name: JwtBearer
+  href: api/Apq.Cfg.WebApi.AuthenticationType.html#Apq_Cfg_WebApi_AuthenticationType_JwtBearer
+  commentId: F:Apq.Cfg.WebApi.AuthenticationType.JwtBearer
+  fullName: Apq.Cfg.WebApi.AuthenticationType.JwtBearer
+  nameWithType: AuthenticationType.JwtBearer
+- uid: Apq.Cfg.WebApi.AuthenticationType.None
+  name: None
+  href: api/Apq.Cfg.WebApi.AuthenticationType.html#Apq_Cfg_WebApi_AuthenticationType_None
+  commentId: F:Apq.Cfg.WebApi.AuthenticationType.None
+  fullName: Apq.Cfg.WebApi.AuthenticationType.None
+  nameWithType: AuthenticationType.None
+- uid: Apq.Cfg.WebApi.Controllers
+  name: Apq.Cfg.WebApi.Controllers
+  href: api/Apq.Cfg.WebApi.Controllers.html
+  commentId: N:Apq.Cfg.WebApi.Controllers
+  fullName: Apq.Cfg.WebApi.Controllers
+  nameWithType: Apq.Cfg.WebApi.Controllers
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController
+  name: ConfigController
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html
+  commentId: T:Apq.Cfg.WebApi.Controllers.ConfigController
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController
+  nameWithType: ConfigController
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.#ctor(Apq.Cfg.WebApi.Services.IConfigApiService,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})
+  name: ConfigController(IConfigApiService, IOptions<WebApiOptions>)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController__ctor_Apq_Cfg_WebApi_Services_IConfigApiService_Microsoft_Extensions_Options_IOptions_Apq_Cfg_WebApi_WebApiOptions__
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.#ctor(Apq.Cfg.WebApi.Services.IConfigApiService,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})
+  name.vb: New(IConfigApiService, IOptions(Of WebApiOptions))
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.ConfigController(Apq.Cfg.WebApi.Services.IConfigApiService, Microsoft.Extensions.Options.IOptions<Apq.Cfg.WebApi.WebApiOptions>)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.New(Apq.Cfg.WebApi.Services.IConfigApiService, Microsoft.Extensions.Options.IOptions(Of Apq.Cfg.WebApi.WebApiOptions))
+  nameWithType: ConfigController.ConfigController(IConfigApiService, IOptions<WebApiOptions>)
+  nameWithType.vb: ConfigController.New(IConfigApiService, IOptions(Of WebApiOptions))
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.#ctor*
+  name: ConfigController
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController__ctor_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.ConfigController
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.New
+  nameWithType: ConfigController.ConfigController
+  nameWithType.vb: ConfigController.New
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  name: BatchUpdate(BatchUpdateRequest)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_BatchUpdate_Apq_Cfg_WebApi_Models_BatchUpdateRequest_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  nameWithType: ConfigController.BatchUpdate(BatchUpdateRequest)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate*
+  name: BatchUpdate
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_BatchUpdate_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.BatchUpdate
+  nameWithType: ConfigController.BatchUpdate
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey(System.String)
+  name: DeleteKey(string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_DeleteKey_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey(System.String)
+  name.vb: DeleteKey(String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey(string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey(String)
+  nameWithType: ConfigController.DeleteKey(string)
+  nameWithType.vb: ConfigController.DeleteKey(String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey*
+  name: DeleteKey
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_DeleteKey_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteKey
+  nameWithType: ConfigController.DeleteKey
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey(System.Int32,System.String,System.String)
+  name: DeleteSourceKey(int, string, string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_DeleteSourceKey_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey(System.Int32,System.String,System.String)
+  name.vb: DeleteSourceKey(Integer, String, String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey(int, string, string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey(Integer, String, String)
+  nameWithType: ConfigController.DeleteSourceKey(int, string, string)
+  nameWithType.vb: ConfigController.DeleteSourceKey(Integer, String, String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey*
+  name: DeleteSourceKey
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_DeleteSourceKey_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.DeleteSourceKey
+  nameWithType: ConfigController.DeleteSourceKey
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.Export(System.String)
+  name: Export(string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_Export_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.Export(System.String)
+  name.vb: Export(String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.Export(string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.Export(String)
+  nameWithType: ConfigController.Export(string)
+  nameWithType.vb: ConfigController.Export(String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.Export*
+  name: Export
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_Export_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.Export
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.Export
+  nameWithType: ConfigController.Export
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource(System.Int32,System.String,System.String)
+  name: ExportSource(int, string, string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_ExportSource_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource(System.Int32,System.String,System.String)
+  name.vb: ExportSource(Integer, String, String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource(int, string, string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource(Integer, String, String)
+  nameWithType: ConfigController.ExportSource(int, string, string)
+  nameWithType.vb: ConfigController.ExportSource(Integer, String, String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource*
+  name: ExportSource
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_ExportSource_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.ExportSource
+  nameWithType: ConfigController.ExportSource
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged
+  name: GetMerged()
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMerged
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged()
+  nameWithType: ConfigController.GetMerged()
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged*
+  name: GetMerged
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMerged_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMerged
+  nameWithType: ConfigController.GetMerged
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection(System.String)
+  name: GetMergedSection(string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedSection_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection(System.String)
+  name.vb: GetMergedSection(String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection(string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection(String)
+  nameWithType: ConfigController.GetMergedSection(string)
+  nameWithType.vb: ConfigController.GetMergedSection(String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection*
+  name: GetMergedSection
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedSection_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedSection
+  nameWithType: ConfigController.GetMergedSection
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree
+  name: GetMergedTree()
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedTree
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree()
+  nameWithType: ConfigController.GetMergedTree()
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree*
+  name: GetMergedTree
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedTree_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedTree
+  nameWithType: ConfigController.GetMergedTree
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue(System.String)
+  name: GetMergedValue(string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedValue_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue(System.String)
+  name.vb: GetMergedValue(String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue(string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue(String)
+  nameWithType: ConfigController.GetMergedValue(string)
+  nameWithType.vb: ConfigController.GetMergedValue(String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue*
+  name: GetMergedValue
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetMergedValue_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetMergedValue
+  nameWithType: ConfigController.GetMergedValue
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig(System.Int32,System.String)
+  name: GetSourceConfig(int, string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceConfig_System_Int32_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig(System.Int32,System.String)
+  name.vb: GetSourceConfig(Integer, String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig(int, string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig(Integer, String)
+  nameWithType: ConfigController.GetSourceConfig(int, string)
+  nameWithType.vb: ConfigController.GetSourceConfig(Integer, String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig*
+  name: GetSourceConfig
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceConfig_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceConfig
+  nameWithType: ConfigController.GetSourceConfig
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree(System.Int32,System.String)
+  name: GetSourceTree(int, string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceTree_System_Int32_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree(System.Int32,System.String)
+  name.vb: GetSourceTree(Integer, String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree(int, string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree(Integer, String)
+  nameWithType: ConfigController.GetSourceTree(int, string)
+  nameWithType.vb: ConfigController.GetSourceTree(Integer, String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree*
+  name: GetSourceTree
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceTree_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceTree
+  nameWithType: ConfigController.GetSourceTree
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue(System.Int32,System.String,System.String)
+  name: GetSourceValue(int, string, string)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceValue_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue(System.Int32,System.String,System.String)
+  name.vb: GetSourceValue(Integer, String, String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue(int, string, string)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue(Integer, String, String)
+  nameWithType: ConfigController.GetSourceValue(int, string, string)
+  nameWithType.vb: ConfigController.GetSourceValue(Integer, String, String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue*
+  name: GetSourceValue
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSourceValue_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSourceValue
+  nameWithType: ConfigController.GetSourceValue
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSources
+  name: GetSources()
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSources
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.GetSources
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSources()
+  nameWithType: ConfigController.GetSources()
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.GetSources*
+  name: GetSources
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_GetSources_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.GetSources
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.GetSources
+  nameWithType: ConfigController.GetSources
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.Reload
+  name: Reload()
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_Reload
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.Reload
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.Reload()
+  nameWithType: ConfigController.Reload()
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.Reload*
+  name: Reload
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_Reload_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.Reload
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.Reload
+  nameWithType: ConfigController.Reload
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.Save
+  name: Save()
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_Save
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.Save
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.Save()
+  nameWithType: ConfigController.Save()
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.Save*
+  name: Save
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_Save_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.Save
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.Save
+  nameWithType: ConfigController.Save
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue(System.Int32,System.String,System.String,System.String)
+  name: SetSourceValue(int, string, string, string?)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_SetSourceValue_System_Int32_System_String_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue(System.Int32,System.String,System.String,System.String)
+  name.vb: SetSourceValue(Integer, String, String, String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue(int, string, string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue(Integer, String, String, String)
+  nameWithType: ConfigController.SetSourceValue(int, string, string, string?)
+  nameWithType.vb: ConfigController.SetSourceValue(Integer, String, String, String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue*
+  name: SetSourceValue
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_SetSourceValue_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.SetSourceValue
+  nameWithType: ConfigController.SetSourceValue
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.SetValue(System.String,System.String)
+  name: SetValue(string, string?)
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_SetValue_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Controllers.ConfigController.SetValue(System.String,System.String)
+  name.vb: SetValue(String, String)
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.SetValue(string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Controllers.ConfigController.SetValue(String, String)
+  nameWithType: ConfigController.SetValue(string, string?)
+  nameWithType.vb: ConfigController.SetValue(String, String)
+- uid: Apq.Cfg.WebApi.Controllers.ConfigController.SetValue*
+  name: SetValue
+  href: api/Apq.Cfg.WebApi.Controllers.ConfigController.html#Apq_Cfg_WebApi_Controllers_ConfigController_SetValue_
+  commentId: Overload:Apq.Cfg.WebApi.Controllers.ConfigController.SetValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Controllers.ConfigController.SetValue
+  nameWithType: ConfigController.SetValue
+- uid: Apq.Cfg.WebApi.JwtOptions
+  name: JwtOptions
+  href: api/Apq.Cfg.WebApi.JwtOptions.html
+  commentId: T:Apq.Cfg.WebApi.JwtOptions
+  fullName: Apq.Cfg.WebApi.JwtOptions
+  nameWithType: JwtOptions
+- uid: Apq.Cfg.WebApi.JwtOptions.Audience
+  name: Audience
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_Audience
+  commentId: P:Apq.Cfg.WebApi.JwtOptions.Audience
+  fullName: Apq.Cfg.WebApi.JwtOptions.Audience
+  nameWithType: JwtOptions.Audience
+- uid: Apq.Cfg.WebApi.JwtOptions.Audience*
+  name: Audience
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_Audience_
+  commentId: Overload:Apq.Cfg.WebApi.JwtOptions.Audience
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.JwtOptions.Audience
+  nameWithType: JwtOptions.Audience
+- uid: Apq.Cfg.WebApi.JwtOptions.Authority
+  name: Authority
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_Authority
+  commentId: P:Apq.Cfg.WebApi.JwtOptions.Authority
+  fullName: Apq.Cfg.WebApi.JwtOptions.Authority
+  nameWithType: JwtOptions.Authority
+- uid: Apq.Cfg.WebApi.JwtOptions.Authority*
+  name: Authority
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_Authority_
+  commentId: Overload:Apq.Cfg.WebApi.JwtOptions.Authority
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.JwtOptions.Authority
+  nameWithType: JwtOptions.Authority
+- uid: Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata
+  name: RequireHttpsMetadata
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_RequireHttpsMetadata
+  commentId: P:Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata
+  fullName: Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata
+  nameWithType: JwtOptions.RequireHttpsMetadata
+- uid: Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata*
+  name: RequireHttpsMetadata
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_RequireHttpsMetadata_
+  commentId: Overload:Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.JwtOptions.RequireHttpsMetadata
+  nameWithType: JwtOptions.RequireHttpsMetadata
+- uid: Apq.Cfg.WebApi.JwtOptions.ValidateAudience
+  name: ValidateAudience
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_ValidateAudience
+  commentId: P:Apq.Cfg.WebApi.JwtOptions.ValidateAudience
+  fullName: Apq.Cfg.WebApi.JwtOptions.ValidateAudience
+  nameWithType: JwtOptions.ValidateAudience
+- uid: Apq.Cfg.WebApi.JwtOptions.ValidateAudience*
+  name: ValidateAudience
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_ValidateAudience_
+  commentId: Overload:Apq.Cfg.WebApi.JwtOptions.ValidateAudience
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.JwtOptions.ValidateAudience
+  nameWithType: JwtOptions.ValidateAudience
+- uid: Apq.Cfg.WebApi.JwtOptions.ValidateIssuer
+  name: ValidateIssuer
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_ValidateIssuer
+  commentId: P:Apq.Cfg.WebApi.JwtOptions.ValidateIssuer
+  fullName: Apq.Cfg.WebApi.JwtOptions.ValidateIssuer
+  nameWithType: JwtOptions.ValidateIssuer
+- uid: Apq.Cfg.WebApi.JwtOptions.ValidateIssuer*
+  name: ValidateIssuer
+  href: api/Apq.Cfg.WebApi.JwtOptions.html#Apq_Cfg_WebApi_JwtOptions_ValidateIssuer_
+  commentId: Overload:Apq.Cfg.WebApi.JwtOptions.ValidateIssuer
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.JwtOptions.ValidateIssuer
+  nameWithType: JwtOptions.ValidateIssuer
+- uid: Apq.Cfg.WebApi.Middleware
+  name: Apq.Cfg.WebApi.Middleware
+  href: api/Apq.Cfg.WebApi.Middleware.html
+  commentId: N:Apq.Cfg.WebApi.Middleware
+  fullName: Apq.Cfg.WebApi.Middleware
+  nameWithType: Apq.Cfg.WebApi.Middleware
+- uid: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware
+  name: ConfigApiMiddleware
+  href: api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html
+  commentId: T:Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware
+  fullName: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware
+  nameWithType: ConfigApiMiddleware
+- uid: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.#ctor(Microsoft.AspNetCore.Http.RequestDelegate,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})
+  name: ConfigApiMiddleware(RequestDelegate, IOptions<WebApiOptions>)
+  href: api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html#Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware__ctor_Microsoft_AspNetCore_Http_RequestDelegate_Microsoft_Extensions_Options_IOptions_Apq_Cfg_WebApi_WebApiOptions__
+  commentId: M:Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.#ctor(Microsoft.AspNetCore.Http.RequestDelegate,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})
+  name.vb: New(RequestDelegate, IOptions(Of WebApiOptions))
+  fullName: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.ConfigApiMiddleware(Microsoft.AspNetCore.Http.RequestDelegate, Microsoft.Extensions.Options.IOptions<Apq.Cfg.WebApi.WebApiOptions>)
+  fullName.vb: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.New(Microsoft.AspNetCore.Http.RequestDelegate, Microsoft.Extensions.Options.IOptions(Of Apq.Cfg.WebApi.WebApiOptions))
+  nameWithType: ConfigApiMiddleware.ConfigApiMiddleware(RequestDelegate, IOptions<WebApiOptions>)
+  nameWithType.vb: ConfigApiMiddleware.New(RequestDelegate, IOptions(Of WebApiOptions))
+- uid: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.#ctor*
+  name: ConfigApiMiddleware
+  href: api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html#Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware__ctor_
+  commentId: Overload:Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.ConfigApiMiddleware
+  fullName.vb: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.New
+  nameWithType: ConfigApiMiddleware.ConfigApiMiddleware
+  nameWithType.vb: ConfigApiMiddleware.New
+- uid: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync(Microsoft.AspNetCore.Http.HttpContext)
+  name: InvokeAsync(HttpContext)
+  href: api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html#Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware_InvokeAsync_Microsoft_AspNetCore_Http_HttpContext_
+  commentId: M:Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync(Microsoft.AspNetCore.Http.HttpContext)
+  fullName: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync(Microsoft.AspNetCore.Http.HttpContext)
+  nameWithType: ConfigApiMiddleware.InvokeAsync(HttpContext)
+- uid: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync*
+  name: InvokeAsync
+  href: api/Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.html#Apq_Cfg_WebApi_Middleware_ConfigApiMiddleware_InvokeAsync_
+  commentId: Overload:Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Middleware.ConfigApiMiddleware.InvokeAsync
+  nameWithType: ConfigApiMiddleware.InvokeAsync
+- uid: Apq.Cfg.WebApi.Models
+  name: Apq.Cfg.WebApi.Models
+  href: api/Apq.Cfg.WebApi.Models.html
+  commentId: N:Apq.Cfg.WebApi.Models
+  fullName: Apq.Cfg.WebApi.Models
+  nameWithType: Apq.Cfg.WebApi.Models
+- uid: Apq.Cfg.WebApi.Models.ApiResponse
+  name: ApiResponse
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html
+  commentId: T:Apq.Cfg.WebApi.Models.ApiResponse
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse
+  nameWithType: ApiResponse
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Error
+  name: Error
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Error
+  commentId: P:Apq.Cfg.WebApi.Models.ApiResponse.Error
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Error
+  nameWithType: ApiResponse.Error
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Error*
+  name: Error
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Error_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse.Error
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Error
+  nameWithType: ApiResponse.Error
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode
+  name: ErrorCode
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_ErrorCode
+  commentId: P:Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode
+  nameWithType: ApiResponse.ErrorCode
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode*
+  name: ErrorCode
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_ErrorCode_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.ErrorCode
+  nameWithType: ApiResponse.ErrorCode
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Fail(System.String,System.String)
+  name: Fail(string, string?)
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Fail_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Models.ApiResponse.Fail(System.String,System.String)
+  name.vb: Fail(String, String)
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Fail(string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse.Fail(String, String)
+  nameWithType: ApiResponse.Fail(string, string?)
+  nameWithType.vb: ApiResponse.Fail(String, String)
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Fail*
+  name: Fail
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Fail_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse.Fail
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Fail
+  nameWithType: ApiResponse.Fail
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Ok
+  name: Ok()
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Ok
+  commentId: M:Apq.Cfg.WebApi.Models.ApiResponse.Ok
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Ok()
+  nameWithType: ApiResponse.Ok()
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Ok*
+  name: Ok
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Ok_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse.Ok
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Ok
+  nameWithType: ApiResponse.Ok
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Success
+  name: Success
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Success
+  commentId: P:Apq.Cfg.WebApi.Models.ApiResponse.Success
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Success
+  nameWithType: ApiResponse.Success
+- uid: Apq.Cfg.WebApi.Models.ApiResponse.Success*
+  name: Success
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse.html#Apq_Cfg_WebApi_Models_ApiResponse_Success_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse.Success
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse.Success
+  nameWithType: ApiResponse.Success
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1
+  name: ApiResponse<T>
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html
+  commentId: T:Apq.Cfg.WebApi.Models.ApiResponse`1
+  name.vb: ApiResponse(Of T)
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T)
+  nameWithType: ApiResponse<T>
+  nameWithType.vb: ApiResponse(Of T)
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Data
+  name: Data
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Data
+  commentId: P:Apq.Cfg.WebApi.Models.ApiResponse`1.Data
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Data
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Data
+  nameWithType: ApiResponse<T>.Data
+  nameWithType.vb: ApiResponse(Of T).Data
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Data*
+  name: Data
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Data_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse`1.Data
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Data
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Data
+  nameWithType: ApiResponse<T>.Data
+  nameWithType.vb: ApiResponse(Of T).Data
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Error
+  name: Error
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Error
+  commentId: P:Apq.Cfg.WebApi.Models.ApiResponse`1.Error
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Error
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Error
+  nameWithType: ApiResponse<T>.Error
+  nameWithType.vb: ApiResponse(Of T).Error
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Error*
+  name: Error
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Error_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse`1.Error
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Error
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Error
+  nameWithType: ApiResponse<T>.Error
+  nameWithType.vb: ApiResponse(Of T).Error
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.ErrorCode
+  name: ErrorCode
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_ErrorCode
+  commentId: P:Apq.Cfg.WebApi.Models.ApiResponse`1.ErrorCode
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.ErrorCode
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).ErrorCode
+  nameWithType: ApiResponse<T>.ErrorCode
+  nameWithType.vb: ApiResponse(Of T).ErrorCode
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.ErrorCode*
+  name: ErrorCode
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_ErrorCode_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse`1.ErrorCode
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.ErrorCode
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).ErrorCode
+  nameWithType: ApiResponse<T>.ErrorCode
+  nameWithType.vb: ApiResponse(Of T).ErrorCode
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Fail(System.String,System.String)
+  name: Fail(string, string?)
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Fail_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Models.ApiResponse`1.Fail(System.String,System.String)
+  name.vb: Fail(String, String)
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Fail(string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Fail(String, String)
+  nameWithType: ApiResponse<T>.Fail(string, string?)
+  nameWithType.vb: ApiResponse(Of T).Fail(String, String)
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Fail*
+  name: Fail
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Fail_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse`1.Fail
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Fail
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Fail
+  nameWithType: ApiResponse<T>.Fail
+  nameWithType.vb: ApiResponse(Of T).Fail
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Ok(`0)
+  name: Ok(T)
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Ok__0_
+  commentId: M:Apq.Cfg.WebApi.Models.ApiResponse`1.Ok(`0)
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Ok(T)
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Ok(T)
+  nameWithType: ApiResponse<T>.Ok(T)
+  nameWithType.vb: ApiResponse(Of T).Ok(T)
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Ok*
+  name: Ok
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Ok_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse`1.Ok
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Ok
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Ok
+  nameWithType: ApiResponse<T>.Ok
+  nameWithType.vb: ApiResponse(Of T).Ok
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Success
+  name: Success
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Success
+  commentId: P:Apq.Cfg.WebApi.Models.ApiResponse`1.Success
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Success
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Success
+  nameWithType: ApiResponse<T>.Success
+  nameWithType.vb: ApiResponse(Of T).Success
+- uid: Apq.Cfg.WebApi.Models.ApiResponse`1.Success*
+  name: Success
+  href: api/Apq.Cfg.WebApi.Models.ApiResponse-1.html#Apq_Cfg_WebApi_Models_ApiResponse_1_Success_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ApiResponse`1.Success
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ApiResponse<T>.Success
+  fullName.vb: Apq.Cfg.WebApi.Models.ApiResponse(Of T).Success
+  nameWithType: ApiResponse<T>.Success
+  nameWithType.vb: ApiResponse(Of T).Success
+- uid: Apq.Cfg.WebApi.Models.BatchUpdateRequest
+  name: BatchUpdateRequest
+  href: api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html
+  commentId: T:Apq.Cfg.WebApi.Models.BatchUpdateRequest
+  fullName: Apq.Cfg.WebApi.Models.BatchUpdateRequest
+  nameWithType: BatchUpdateRequest
+- uid: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel
+  name: TargetLevel
+  href: api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html#Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetLevel
+  commentId: P:Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel
+  fullName: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel
+  nameWithType: BatchUpdateRequest.TargetLevel
+- uid: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel*
+  name: TargetLevel
+  href: api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html#Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetLevel_
+  commentId: Overload:Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetLevel
+  nameWithType: BatchUpdateRequest.TargetLevel
+- uid: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName
+  name: TargetName
+  href: api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html#Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetName
+  commentId: P:Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName
+  fullName: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName
+  nameWithType: BatchUpdateRequest.TargetName
+- uid: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName*
+  name: TargetName
+  href: api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html#Apq_Cfg_WebApi_Models_BatchUpdateRequest_TargetName_
+  commentId: Overload:Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.BatchUpdateRequest.TargetName
+  nameWithType: BatchUpdateRequest.TargetName
+- uid: Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values
+  name: Values
+  href: api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html#Apq_Cfg_WebApi_Models_BatchUpdateRequest_Values
+  commentId: P:Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values
+  fullName: Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values
+  nameWithType: BatchUpdateRequest.Values
+- uid: Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values*
+  name: Values
+  href: api/Apq.Cfg.WebApi.Models.BatchUpdateRequest.html#Apq_Cfg_WebApi_Models_BatchUpdateRequest_Values_
+  commentId: Overload:Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.BatchUpdateRequest.Values
+  nameWithType: BatchUpdateRequest.Values
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode
+  name: ConfigTreeNode
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html
+  commentId: T:Apq.Cfg.WebApi.Models.ConfigTreeNode
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode
+  nameWithType: ConfigTreeNode
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.Children
+  name: Children
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_Children
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigTreeNode.Children
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.Children
+  nameWithType: ConfigTreeNode.Children
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.Children*
+  name: Children
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_Children_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigTreeNode.Children
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.Children
+  nameWithType: ConfigTreeNode.Children
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue
+  name: HasValue
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_HasValue
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue
+  nameWithType: ConfigTreeNode.HasValue
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue*
+  name: HasValue
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_HasValue_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.HasValue
+  nameWithType: ConfigTreeNode.HasValue
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked
+  name: IsMasked
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_IsMasked
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked
+  nameWithType: ConfigTreeNode.IsMasked
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked*
+  name: IsMasked
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_IsMasked_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.IsMasked
+  nameWithType: ConfigTreeNode.IsMasked
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.Key
+  name: Key
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_Key
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigTreeNode.Key
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.Key
+  nameWithType: ConfigTreeNode.Key
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.Key*
+  name: Key
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_Key_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigTreeNode.Key
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.Key
+  nameWithType: ConfigTreeNode.Key
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.Value
+  name: Value
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_Value
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigTreeNode.Value
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.Value
+  nameWithType: ConfigTreeNode.Value
+- uid: Apq.Cfg.WebApi.Models.ConfigTreeNode.Value*
+  name: Value
+  href: api/Apq.Cfg.WebApi.Models.ConfigTreeNode.html#Apq_Cfg_WebApi_Models_ConfigTreeNode_Value_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigTreeNode.Value
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigTreeNode.Value
+  nameWithType: ConfigTreeNode.Value
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse
+  name: ConfigValueResponse
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html
+  commentId: T:Apq.Cfg.WebApi.Models.ConfigValueResponse
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse
+  nameWithType: ConfigValueResponse
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists
+  name: Exists
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_Exists
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists
+  nameWithType: ConfigValueResponse.Exists
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists*
+  name: Exists
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_Exists_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.Exists
+  nameWithType: ConfigValueResponse.Exists
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked
+  name: IsMasked
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_IsMasked
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked
+  nameWithType: ConfigValueResponse.IsMasked
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked*
+  name: IsMasked
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_IsMasked_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.IsMasked
+  nameWithType: ConfigValueResponse.IsMasked
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.Key
+  name: Key
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_Key
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigValueResponse.Key
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.Key
+  nameWithType: ConfigValueResponse.Key
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.Key*
+  name: Key
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_Key_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigValueResponse.Key
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.Key
+  nameWithType: ConfigValueResponse.Key
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.Value
+  name: Value
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_Value
+  commentId: P:Apq.Cfg.WebApi.Models.ConfigValueResponse.Value
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.Value
+  nameWithType: ConfigValueResponse.Value
+- uid: Apq.Cfg.WebApi.Models.ConfigValueResponse.Value*
+  name: Value
+  href: api/Apq.Cfg.WebApi.Models.ConfigValueResponse.html#Apq_Cfg_WebApi_Models_ConfigValueResponse_Value_
+  commentId: Overload:Apq.Cfg.WebApi.Models.ConfigValueResponse.Value
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Models.ConfigValueResponse.Value
+  nameWithType: ConfigValueResponse.Value
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions
+  name: ServiceCollectionExtensions
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html
+  commentId: T:Apq.Cfg.WebApi.ServiceCollectionExtensions
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions
+  nameWithType: ServiceCollectionExtensions
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration,System.Action{Apq.Cfg.WebApi.WebApiOptions})
+  name: AddApqCfgWebApi(IServiceCollection, IConfiguration, Action<WebApiOptions>?)
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html#Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApi_Microsoft_Extensions_DependencyInjection_IServiceCollection_Microsoft_Extensions_Configuration_IConfiguration_System_Action_Apq_Cfg_WebApi_WebApiOptions__
+  commentId: M:Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,Microsoft.Extensions.Configuration.IConfiguration,System.Action{Apq.Cfg.WebApi.WebApiOptions})
+  name.vb: AddApqCfgWebApi(IServiceCollection, IConfiguration, Action(Of WebApiOptions))
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection, Microsoft.Extensions.Configuration.IConfiguration, System.Action<Apq.Cfg.WebApi.WebApiOptions>?)
+  fullName.vb: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection, Microsoft.Extensions.Configuration.IConfiguration, System.Action(Of Apq.Cfg.WebApi.WebApiOptions))
+  nameWithType: ServiceCollectionExtensions.AddApqCfgWebApi(IServiceCollection, IConfiguration, Action<WebApiOptions>?)
+  nameWithType.vb: ServiceCollectionExtensions.AddApqCfgWebApi(IServiceCollection, IConfiguration, Action(Of WebApiOptions))
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{Apq.Cfg.WebApi.WebApiOptions})
+  name: AddApqCfgWebApi(IServiceCollection, Action<WebApiOptions>?)
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html#Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApi_Microsoft_Extensions_DependencyInjection_IServiceCollection_System_Action_Apq_Cfg_WebApi_WebApiOptions__
+  commentId: M:Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{Apq.Cfg.WebApi.WebApiOptions})
+  name.vb: AddApqCfgWebApi(IServiceCollection, Action(Of WebApiOptions))
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection, System.Action<Apq.Cfg.WebApi.WebApiOptions>?)
+  fullName.vb: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi(Microsoft.Extensions.DependencyInjection.IServiceCollection, System.Action(Of Apq.Cfg.WebApi.WebApiOptions))
+  nameWithType: ServiceCollectionExtensions.AddApqCfgWebApi(IServiceCollection, Action<WebApiOptions>?)
+  nameWithType.vb: ServiceCollectionExtensions.AddApqCfgWebApi(IServiceCollection, Action(Of WebApiOptions))
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi*
+  name: AddApqCfgWebApi
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html#Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApi_
+  commentId: Overload:Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApi
+  nameWithType: ServiceCollectionExtensions.AddApqCfgWebApi
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)
+  name: AddApqCfgWebApiAuthentication(IServiceCollection, WebApiOptions)
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html#Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiAuthentication_Microsoft_Extensions_DependencyInjection_IServiceCollection_Apq_Cfg_WebApi_WebApiOptions_
+  commentId: M:Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication(Microsoft.Extensions.DependencyInjection.IServiceCollection, Apq.Cfg.WebApi.WebApiOptions)
+  nameWithType: ServiceCollectionExtensions.AddApqCfgWebApiAuthentication(IServiceCollection, WebApiOptions)
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication*
+  name: AddApqCfgWebApiAuthentication
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html#Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiAuthentication_
+  commentId: Overload:Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiAuthentication
+  nameWithType: ServiceCollectionExtensions.AddApqCfgWebApiAuthentication
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)
+  name: AddApqCfgWebApiCors(IServiceCollection, WebApiOptions)
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html#Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiCors_Microsoft_Extensions_DependencyInjection_IServiceCollection_Apq_Cfg_WebApi_WebApiOptions_
+  commentId: M:Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors(Microsoft.Extensions.DependencyInjection.IServiceCollection,Apq.Cfg.WebApi.WebApiOptions)
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors(Microsoft.Extensions.DependencyInjection.IServiceCollection, Apq.Cfg.WebApi.WebApiOptions)
+  nameWithType: ServiceCollectionExtensions.AddApqCfgWebApiCors(IServiceCollection, WebApiOptions)
+- uid: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors*
+  name: AddApqCfgWebApiCors
+  href: api/Apq.Cfg.WebApi.ServiceCollectionExtensions.html#Apq_Cfg_WebApi_ServiceCollectionExtensions_AddApqCfgWebApiCors_
+  commentId: Overload:Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.ServiceCollectionExtensions.AddApqCfgWebApiCors
+  nameWithType: ServiceCollectionExtensions.AddApqCfgWebApiCors
+- uid: Apq.Cfg.WebApi.Services
+  name: Apq.Cfg.WebApi.Services
+  href: api/Apq.Cfg.WebApi.Services.html
+  commentId: N:Apq.Cfg.WebApi.Services
+  fullName: Apq.Cfg.WebApi.Services
+  nameWithType: Apq.Cfg.WebApi.Services
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService
+  name: ConfigApiService
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html
+  commentId: T:Apq.Cfg.WebApi.Services.ConfigApiService
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService
+  nameWithType: ConfigApiService
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.#ctor(Apq.Cfg.ICfgRoot,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})
+  name: ConfigApiService(ICfgRoot, IOptions<WebApiOptions>)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService__ctor_Apq_Cfg_ICfgRoot_Microsoft_Extensions_Options_IOptions_Apq_Cfg_WebApi_WebApiOptions__
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.#ctor(Apq.Cfg.ICfgRoot,Microsoft.Extensions.Options.IOptions{Apq.Cfg.WebApi.WebApiOptions})
+  name.vb: New(ICfgRoot, IOptions(Of WebApiOptions))
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.ConfigApiService(Apq.Cfg.ICfgRoot, Microsoft.Extensions.Options.IOptions<Apq.Cfg.WebApi.WebApiOptions>)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.New(Apq.Cfg.ICfgRoot, Microsoft.Extensions.Options.IOptions(Of Apq.Cfg.WebApi.WebApiOptions))
+  nameWithType: ConfigApiService.ConfigApiService(ICfgRoot, IOptions<WebApiOptions>)
+  nameWithType.vb: ConfigApiService.New(ICfgRoot, IOptions(Of WebApiOptions))
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.#ctor*
+  name: ConfigApiService
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService__ctor_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.#ctor
+  isSpec: "True"
+  name.vb: New
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.ConfigApiService
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.New
+  nameWithType: ConfigApiService.ConfigApiService
+  nameWithType.vb: ConfigApiService.New
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  name: BatchUpdate(BatchUpdateRequest)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_BatchUpdate_Apq_Cfg_WebApi_Models_BatchUpdateRequest_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  nameWithType: ConfigApiService.BatchUpdate(BatchUpdateRequest)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate*
+  name: BatchUpdate
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_BatchUpdate_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.BatchUpdate
+  nameWithType: ConfigApiService.BatchUpdate
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey(System.String)
+  name: DeleteKey(string)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_DeleteKey_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey(System.String)
+  name.vb: DeleteKey(String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey(string)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey(String)
+  nameWithType: ConfigApiService.DeleteKey(string)
+  nameWithType.vb: ConfigApiService.DeleteKey(String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey*
+  name: DeleteKey
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_DeleteKey_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteKey
+  nameWithType: ConfigApiService.DeleteKey
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)
+  name: DeleteSourceKey(int, string, string)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_DeleteSourceKey_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)
+  name.vb: DeleteSourceKey(Integer, String, String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey(int, string, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey(Integer, String, String)
+  nameWithType: ConfigApiService.DeleteSourceKey(int, string, string)
+  nameWithType.vb: ConfigApiService.DeleteSourceKey(Integer, String, String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey*
+  name: DeleteSourceKey
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_DeleteSourceKey_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.DeleteSourceKey
+  nameWithType: ConfigApiService.DeleteSourceKey
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)
+  name: Export(string, int?, string?)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_Export_System_String_System_Nullable_System_Int32__System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)
+  name.vb: Export(String, Integer?, String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.Export(string, int?, string?)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.Export(String, Integer?, String)
+  nameWithType: ConfigApiService.Export(string, int?, string?)
+  nameWithType.vb: ConfigApiService.Export(String, Integer?, String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.Export*
+  name: Export
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_Export_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.Export
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.Export
+  nameWithType: ConfigApiService.Export
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig
+  name: GetMergedConfig()
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedConfig
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig()
+  nameWithType: ConfigApiService.GetMergedConfig()
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig*
+  name: GetMergedConfig
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedConfig_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedConfig
+  nameWithType: ConfigApiService.GetMergedConfig
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection(System.String)
+  name: GetMergedSection(string)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedSection_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection(System.String)
+  name.vb: GetMergedSection(String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection(string)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection(String)
+  nameWithType: ConfigApiService.GetMergedSection(string)
+  nameWithType.vb: ConfigApiService.GetMergedSection(String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection*
+  name: GetMergedSection
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedSection_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedSection
+  nameWithType: ConfigApiService.GetMergedSection
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree
+  name: GetMergedTree()
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedTree
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree()
+  nameWithType: ConfigApiService.GetMergedTree()
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree*
+  name: GetMergedTree
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedTree_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedTree
+  nameWithType: ConfigApiService.GetMergedTree
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue(System.String)
+  name: GetMergedValue(string)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedValue_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue(System.String)
+  name.vb: GetMergedValue(String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue(string)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue(String)
+  nameWithType: ConfigApiService.GetMergedValue(string)
+  nameWithType.vb: ConfigApiService.GetMergedValue(String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue*
+  name: GetMergedValue
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetMergedValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetMergedValue
+  nameWithType: ConfigApiService.GetMergedValue
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig(System.Int32,System.String)
+  name: GetSourceConfig(int, string)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceConfig_System_Int32_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig(System.Int32,System.String)
+  name.vb: GetSourceConfig(Integer, String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig(int, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig(Integer, String)
+  nameWithType: ConfigApiService.GetSourceConfig(int, string)
+  nameWithType.vb: ConfigApiService.GetSourceConfig(Integer, String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig*
+  name: GetSourceConfig
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceConfig_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceConfig
+  nameWithType: ConfigApiService.GetSourceConfig
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree(System.Int32,System.String)
+  name: GetSourceTree(int, string)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceTree_System_Int32_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree(System.Int32,System.String)
+  name.vb: GetSourceTree(Integer, String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree(int, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree(Integer, String)
+  nameWithType: ConfigApiService.GetSourceTree(int, string)
+  nameWithType.vb: ConfigApiService.GetSourceTree(Integer, String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree*
+  name: GetSourceTree
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceTree_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceTree
+  nameWithType: ConfigApiService.GetSourceTree
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue(System.Int32,System.String,System.String)
+  name: GetSourceValue(int, string, string)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceValue_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue(System.Int32,System.String,System.String)
+  name.vb: GetSourceValue(Integer, String, String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue(int, string, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue(Integer, String, String)
+  nameWithType: ConfigApiService.GetSourceValue(int, string, string)
+  nameWithType.vb: ConfigApiService.GetSourceValue(Integer, String, String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue*
+  name: GetSourceValue
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSourceValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSourceValue
+  nameWithType: ConfigApiService.GetSourceValue
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSources
+  name: GetSources()
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSources
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.GetSources
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSources()
+  nameWithType: ConfigApiService.GetSources()
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.GetSources*
+  name: GetSources
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_GetSources_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.GetSources
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.GetSources
+  nameWithType: ConfigApiService.GetSources
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.Reload
+  name: Reload()
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_Reload
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.Reload
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.Reload()
+  nameWithType: ConfigApiService.Reload()
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.Reload*
+  name: Reload
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_Reload_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.Reload
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.Reload
+  nameWithType: ConfigApiService.Reload
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync
+  name: SaveAsync()
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_SaveAsync
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync()
+  nameWithType: ConfigApiService.SaveAsync()
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync*
+  name: SaveAsync
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_SaveAsync_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.SaveAsync
+  nameWithType: ConfigApiService.SaveAsync
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)
+  name: SetSourceValue(int, string, string, string?)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_SetSourceValue_System_Int32_System_String_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)
+  name.vb: SetSourceValue(Integer, String, String, String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue(int, string, string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue(Integer, String, String, String)
+  nameWithType: ConfigApiService.SetSourceValue(int, string, string, string?)
+  nameWithType.vb: ConfigApiService.SetSourceValue(Integer, String, String, String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue*
+  name: SetSourceValue
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_SetSourceValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.SetSourceValue
+  nameWithType: ConfigApiService.SetSourceValue
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.SetValue(System.String,System.String)
+  name: SetValue(string, string?)
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_SetValue_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.ConfigApiService.SetValue(System.String,System.String)
+  name.vb: SetValue(String, String)
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.SetValue(string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Services.ConfigApiService.SetValue(String, String)
+  nameWithType: ConfigApiService.SetValue(string, string?)
+  nameWithType.vb: ConfigApiService.SetValue(String, String)
+- uid: Apq.Cfg.WebApi.Services.ConfigApiService.SetValue*
+  name: SetValue
+  href: api/Apq.Cfg.WebApi.Services.ConfigApiService.html#Apq_Cfg_WebApi_Services_ConfigApiService_SetValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.ConfigApiService.SetValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.ConfigApiService.SetValue
+  nameWithType: ConfigApiService.SetValue
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService
+  name: IConfigApiService
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html
+  commentId: T:Apq.Cfg.WebApi.Services.IConfigApiService
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService
+  nameWithType: IConfigApiService
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  name: BatchUpdate(BatchUpdateRequest)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_BatchUpdate_Apq_Cfg_WebApi_Models_BatchUpdateRequest_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate(Apq.Cfg.WebApi.Models.BatchUpdateRequest)
+  nameWithType: IConfigApiService.BatchUpdate(BatchUpdateRequest)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate*
+  name: BatchUpdate
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_BatchUpdate_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.BatchUpdate
+  nameWithType: IConfigApiService.BatchUpdate
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey(System.String)
+  name: DeleteKey(string)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_DeleteKey_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey(System.String)
+  name.vb: DeleteKey(String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey(string)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey(String)
+  nameWithType: IConfigApiService.DeleteKey(string)
+  nameWithType.vb: IConfigApiService.DeleteKey(String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey*
+  name: DeleteKey
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_DeleteKey_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteKey
+  nameWithType: IConfigApiService.DeleteKey
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)
+  name: DeleteSourceKey(int, string, string)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_DeleteSourceKey_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey(System.Int32,System.String,System.String)
+  name.vb: DeleteSourceKey(Integer, String, String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey(int, string, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey(Integer, String, String)
+  nameWithType: IConfigApiService.DeleteSourceKey(int, string, string)
+  nameWithType.vb: IConfigApiService.DeleteSourceKey(Integer, String, String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey*
+  name: DeleteSourceKey
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_DeleteSourceKey_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.DeleteSourceKey
+  nameWithType: IConfigApiService.DeleteSourceKey
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)
+  name: Export(string, int?, string?)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_Export_System_String_System_Nullable_System_Int32__System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.Export(System.String,System.Nullable{System.Int32},System.String)
+  name.vb: Export(String, Integer?, String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.Export(string, int?, string?)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.Export(String, Integer?, String)
+  nameWithType: IConfigApiService.Export(string, int?, string?)
+  nameWithType.vb: IConfigApiService.Export(String, Integer?, String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.Export*
+  name: Export
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_Export_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.Export
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.Export
+  nameWithType: IConfigApiService.Export
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig
+  name: GetMergedConfig()
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedConfig
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig()
+  nameWithType: IConfigApiService.GetMergedConfig()
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig*
+  name: GetMergedConfig
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedConfig_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedConfig
+  nameWithType: IConfigApiService.GetMergedConfig
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection(System.String)
+  name: GetMergedSection(string)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedSection_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection(System.String)
+  name.vb: GetMergedSection(String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection(string)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection(String)
+  nameWithType: IConfigApiService.GetMergedSection(string)
+  nameWithType.vb: IConfigApiService.GetMergedSection(String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection*
+  name: GetMergedSection
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedSection_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedSection
+  nameWithType: IConfigApiService.GetMergedSection
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree
+  name: GetMergedTree()
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedTree
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree()
+  nameWithType: IConfigApiService.GetMergedTree()
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree*
+  name: GetMergedTree
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedTree_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedTree
+  nameWithType: IConfigApiService.GetMergedTree
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue(System.String)
+  name: GetMergedValue(string)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedValue_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue(System.String)
+  name.vb: GetMergedValue(String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue(string)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue(String)
+  nameWithType: IConfigApiService.GetMergedValue(string)
+  nameWithType.vb: IConfigApiService.GetMergedValue(String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue*
+  name: GetMergedValue
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetMergedValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetMergedValue
+  nameWithType: IConfigApiService.GetMergedValue
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig(System.Int32,System.String)
+  name: GetSourceConfig(int, string)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceConfig_System_Int32_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig(System.Int32,System.String)
+  name.vb: GetSourceConfig(Integer, String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig(int, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig(Integer, String)
+  nameWithType: IConfigApiService.GetSourceConfig(int, string)
+  nameWithType.vb: IConfigApiService.GetSourceConfig(Integer, String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig*
+  name: GetSourceConfig
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceConfig_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceConfig
+  nameWithType: IConfigApiService.GetSourceConfig
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree(System.Int32,System.String)
+  name: GetSourceTree(int, string)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceTree_System_Int32_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree(System.Int32,System.String)
+  name.vb: GetSourceTree(Integer, String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree(int, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree(Integer, String)
+  nameWithType: IConfigApiService.GetSourceTree(int, string)
+  nameWithType.vb: IConfigApiService.GetSourceTree(Integer, String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree*
+  name: GetSourceTree
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceTree_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceTree
+  nameWithType: IConfigApiService.GetSourceTree
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue(System.Int32,System.String,System.String)
+  name: GetSourceValue(int, string, string)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceValue_System_Int32_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue(System.Int32,System.String,System.String)
+  name.vb: GetSourceValue(Integer, String, String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue(int, string, string)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue(Integer, String, String)
+  nameWithType: IConfigApiService.GetSourceValue(int, string, string)
+  nameWithType.vb: IConfigApiService.GetSourceValue(Integer, String, String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue*
+  name: GetSourceValue
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSourceValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSourceValue
+  nameWithType: IConfigApiService.GetSourceValue
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSources
+  name: GetSources()
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSources
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.GetSources
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSources()
+  nameWithType: IConfigApiService.GetSources()
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.GetSources*
+  name: GetSources
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_GetSources_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.GetSources
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.GetSources
+  nameWithType: IConfigApiService.GetSources
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.Reload
+  name: Reload()
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_Reload
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.Reload
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.Reload()
+  nameWithType: IConfigApiService.Reload()
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.Reload*
+  name: Reload
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_Reload_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.Reload
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.Reload
+  nameWithType: IConfigApiService.Reload
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync
+  name: SaveAsync()
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_SaveAsync
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync()
+  nameWithType: IConfigApiService.SaveAsync()
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync*
+  name: SaveAsync
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_SaveAsync_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.SaveAsync
+  nameWithType: IConfigApiService.SaveAsync
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)
+  name: SetSourceValue(int, string, string, string?)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_SetSourceValue_System_Int32_System_String_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue(System.Int32,System.String,System.String,System.String)
+  name.vb: SetSourceValue(Integer, String, String, String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue(int, string, string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue(Integer, String, String, String)
+  nameWithType: IConfigApiService.SetSourceValue(int, string, string, string?)
+  nameWithType.vb: IConfigApiService.SetSourceValue(Integer, String, String, String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue*
+  name: SetSourceValue
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_SetSourceValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.SetSourceValue
+  nameWithType: IConfigApiService.SetSourceValue
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.SetValue(System.String,System.String)
+  name: SetValue(string, string?)
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_SetValue_System_String_System_String_
+  commentId: M:Apq.Cfg.WebApi.Services.IConfigApiService.SetValue(System.String,System.String)
+  name.vb: SetValue(String, String)
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.SetValue(string, string?)
+  fullName.vb: Apq.Cfg.WebApi.Services.IConfigApiService.SetValue(String, String)
+  nameWithType: IConfigApiService.SetValue(string, string?)
+  nameWithType.vb: IConfigApiService.SetValue(String, String)
+- uid: Apq.Cfg.WebApi.Services.IConfigApiService.SetValue*
+  name: SetValue
+  href: api/Apq.Cfg.WebApi.Services.IConfigApiService.html#Apq_Cfg_WebApi_Services_IConfigApiService_SetValue_
+  commentId: Overload:Apq.Cfg.WebApi.Services.IConfigApiService.SetValue
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.Services.IConfigApiService.SetValue
+  nameWithType: IConfigApiService.SetValue
+- uid: Apq.Cfg.WebApi.WebApiOptions
+  name: WebApiOptions
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html
+  commentId: T:Apq.Cfg.WebApi.WebApiOptions
+  fullName: Apq.Cfg.WebApi.WebApiOptions
+  nameWithType: WebApiOptions
+- uid: Apq.Cfg.WebApi.WebApiOptions.AllowDelete
+  name: AllowDelete
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_AllowDelete
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.AllowDelete
+  fullName: Apq.Cfg.WebApi.WebApiOptions.AllowDelete
+  nameWithType: WebApiOptions.AllowDelete
+- uid: Apq.Cfg.WebApi.WebApiOptions.AllowDelete*
+  name: AllowDelete
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_AllowDelete_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.AllowDelete
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.AllowDelete
+  nameWithType: WebApiOptions.AllowDelete
+- uid: Apq.Cfg.WebApi.WebApiOptions.AllowRead
+  name: AllowRead
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_AllowRead
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.AllowRead
+  fullName: Apq.Cfg.WebApi.WebApiOptions.AllowRead
+  nameWithType: WebApiOptions.AllowRead
+- uid: Apq.Cfg.WebApi.WebApiOptions.AllowRead*
+  name: AllowRead
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_AllowRead_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.AllowRead
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.AllowRead
+  nameWithType: WebApiOptions.AllowRead
+- uid: Apq.Cfg.WebApi.WebApiOptions.AllowWrite
+  name: AllowWrite
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_AllowWrite
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.AllowWrite
+  fullName: Apq.Cfg.WebApi.WebApiOptions.AllowWrite
+  nameWithType: WebApiOptions.AllowWrite
+- uid: Apq.Cfg.WebApi.WebApiOptions.AllowWrite*
+  name: AllowWrite
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_AllowWrite_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.AllowWrite
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.AllowWrite
+  nameWithType: WebApiOptions.AllowWrite
+- uid: Apq.Cfg.WebApi.WebApiOptions.ApiKey
+  name: ApiKey
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_ApiKey
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.ApiKey
+  fullName: Apq.Cfg.WebApi.WebApiOptions.ApiKey
+  nameWithType: WebApiOptions.ApiKey
+- uid: Apq.Cfg.WebApi.WebApiOptions.ApiKey*
+  name: ApiKey
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_ApiKey_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.ApiKey
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.ApiKey
+  nameWithType: WebApiOptions.ApiKey
+- uid: Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName
+  name: ApiKeyHeaderName
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_ApiKeyHeaderName
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName
+  fullName: Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName
+  nameWithType: WebApiOptions.ApiKeyHeaderName
+- uid: Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName*
+  name: ApiKeyHeaderName
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_ApiKeyHeaderName_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.ApiKeyHeaderName
+  nameWithType: WebApiOptions.ApiKeyHeaderName
+- uid: Apq.Cfg.WebApi.WebApiOptions.Authentication
+  name: Authentication
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_Authentication
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.Authentication
+  fullName: Apq.Cfg.WebApi.WebApiOptions.Authentication
+  nameWithType: WebApiOptions.Authentication
+- uid: Apq.Cfg.WebApi.WebApiOptions.Authentication*
+  name: Authentication
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_Authentication_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.Authentication
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.Authentication
+  nameWithType: WebApiOptions.Authentication
+- uid: Apq.Cfg.WebApi.WebApiOptions.CorsOrigins
+  name: CorsOrigins
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_CorsOrigins
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.CorsOrigins
+  fullName: Apq.Cfg.WebApi.WebApiOptions.CorsOrigins
+  nameWithType: WebApiOptions.CorsOrigins
+- uid: Apq.Cfg.WebApi.WebApiOptions.CorsOrigins*
+  name: CorsOrigins
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_CorsOrigins_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.CorsOrigins
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.CorsOrigins
+  nameWithType: WebApiOptions.CorsOrigins
+- uid: Apq.Cfg.WebApi.WebApiOptions.EnableCors
+  name: EnableCors
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_EnableCors
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.EnableCors
+  fullName: Apq.Cfg.WebApi.WebApiOptions.EnableCors
+  nameWithType: WebApiOptions.EnableCors
+- uid: Apq.Cfg.WebApi.WebApiOptions.EnableCors*
+  name: EnableCors
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_EnableCors_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.EnableCors
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.EnableCors
+  nameWithType: WebApiOptions.EnableCors
+- uid: Apq.Cfg.WebApi.WebApiOptions.Enabled
+  name: Enabled
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_Enabled
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.Enabled
+  fullName: Apq.Cfg.WebApi.WebApiOptions.Enabled
+  nameWithType: WebApiOptions.Enabled
+- uid: Apq.Cfg.WebApi.WebApiOptions.Enabled*
+  name: Enabled
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_Enabled_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.Enabled
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.Enabled
+  nameWithType: WebApiOptions.Enabled
+- uid: Apq.Cfg.WebApi.WebApiOptions.Jwt
+  name: Jwt
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_Jwt
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.Jwt
+  fullName: Apq.Cfg.WebApi.WebApiOptions.Jwt
+  nameWithType: WebApiOptions.Jwt
+- uid: Apq.Cfg.WebApi.WebApiOptions.Jwt*
+  name: Jwt
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_Jwt_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.Jwt
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.Jwt
+  nameWithType: WebApiOptions.Jwt
+- uid: Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues
+  name: MaskSensitiveValues
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_MaskSensitiveValues
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues
+  fullName: Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues
+  nameWithType: WebApiOptions.MaskSensitiveValues
+- uid: Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues*
+  name: MaskSensitiveValues
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_MaskSensitiveValues_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.MaskSensitiveValues
+  nameWithType: WebApiOptions.MaskSensitiveValues
+- uid: Apq.Cfg.WebApi.WebApiOptions.RoutePrefix
+  name: RoutePrefix
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_RoutePrefix
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.RoutePrefix
+  fullName: Apq.Cfg.WebApi.WebApiOptions.RoutePrefix
+  nameWithType: WebApiOptions.RoutePrefix
+- uid: Apq.Cfg.WebApi.WebApiOptions.RoutePrefix*
+  name: RoutePrefix
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_RoutePrefix_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.RoutePrefix
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.RoutePrefix
+  nameWithType: WebApiOptions.RoutePrefix
+- uid: Apq.Cfg.WebApi.WebApiOptions.SectionName
+  name: SectionName
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_SectionName
+  commentId: F:Apq.Cfg.WebApi.WebApiOptions.SectionName
+  fullName: Apq.Cfg.WebApi.WebApiOptions.SectionName
+  nameWithType: WebApiOptions.SectionName
+- uid: Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns
+  name: SensitiveKeyPatterns
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_SensitiveKeyPatterns
+  commentId: P:Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns
+  fullName: Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns
+  nameWithType: WebApiOptions.SensitiveKeyPatterns
+- uid: Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns*
+  name: SensitiveKeyPatterns
+  href: api/Apq.Cfg.WebApi.WebApiOptions.html#Apq_Cfg_WebApi_WebApiOptions_SensitiveKeyPatterns_
+  commentId: Overload:Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns
+  isSpec: "True"
+  fullName: Apq.Cfg.WebApi.WebApiOptions.SensitiveKeyPatterns
+  nameWithType: WebApiOptions.SensitiveKeyPatterns
 - uid: Apq.Cfg.Xml
   name: Apq.Cfg.Xml
   href: api/Apq.Cfg.Xml.html

Some files were not shown because too many files changed in this diff