Compare commits

..
3 Commits
Author SHA1 Message Date
xrain 8ad43526fc 修正了文档认证不显示的问题 2025-12-23 06:00:33 +08:00
xrain e2d30c031d 隐藏了文档中空Tag, 禁用了文档远程校验 2025-12-19 13:37:58 +08:00
xrain 9dc4ef7bce http client 增加了DebugLog 2025-12-18 16:17:18 +08:00
3 changed files with 52 additions and 4 deletions
+11 -2
View File
@@ -8,7 +8,7 @@ using SimApi.Exceptions;
namespace SimApi.Helpers;
public class SimApiHttpClient(string? appId, string appKey)
public class SimApiHttpClient(string? appId, string appKey, bool debug = false)
{
public string Server { get; init; } = string.Empty;
public string SignName { get; init; } = "sign";
@@ -17,7 +17,6 @@ public class SimApiHttpClient(string? appId, string appKey)
public string? AppIdName { get; init; } = "appId";
public string[] SignFields { get; init; } = [];
public T? SignQuery<T>(string url, object? body = null, Dictionary<string, string>? queries = null)
{
url = Server + url;
@@ -68,7 +67,17 @@ public class SimApiHttpClient(string? appId, string appKey)
private T? Query<T>(string url, object? req)
{
var http = new HttpClient();
if (debug)
{
Console.WriteLine($"[HTTPCLIENT请求] {url}\n{SimApiUtil.Json(req)}\n");
}
var resp = http.PostAsJsonAsync(url, req).Result;
if (debug)
{
Console.WriteLine($"[HTTPCLIENT响应] {resp.Content.ReadAsStringAsync().Result}\n");
}
var res = resp.Content.ReadFromJsonAsync<SimApiBaseResponse<T>>().Result;
if (res == null)
{
+16 -2
View File
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
@@ -128,6 +129,7 @@ public static class SimApiExtensions
x.OperationFilter<SimApiSignOperationFilter>();
x.OperationFilter<AesBodyOperationFilter>();
x.SchemaFilter<GlobalDynamicObjectSchemaFilter>();
x.DocumentFilter<RemoveEmptyTagsFilter>();
if (simApiOptions.EnableSimApiAuth)
{
x.OperationFilter<SimApiAuthOperationFilter>();
@@ -161,8 +163,15 @@ public static class SimApiExtensions
new OpenApiSecurityScheme
{
Name = "Token",
In = ParameterLocation.Header
In = ParameterLocation.Header,
Type = SecuritySchemeType.ApiKey
});
x.AddSecurityRequirement(docs => new OpenApiSecurityRequirement
{
{
new OpenApiSecuritySchemeReference("HeaderToken"), new List<string>()
}
});
break;
case "ClientCredentials":
oauthFlows.ClientCredentials = new OpenApiOAuthFlow
@@ -211,6 +220,12 @@ public static class SimApiExtensions
Description = docOptions.ApiAuth.Description,
In = ParameterLocation.Header
});
x.AddSecurityRequirement(docs => new OpenApiSecurityRequirement
{
{
new OpenApiSecuritySchemeReference("oauth2"), new List<string>()
}
});
}
});
}
@@ -392,7 +407,6 @@ public static class SimApiExtensions
x.SwaggerEndpoint($"/swagger/{group.Id}.json", name: group.Name);
}
x.EnableValidator();
x.SupportedSubmitMethods(docOptions.SupportedMethod);
x.DisplayRequestDuration();
});
+25
View File
@@ -0,0 +1,25 @@
using Microsoft.OpenApi;
using Swashbuckle.AspNetCore.SwaggerGen;
using System.Linq;
namespace SimApi.SwaggerFilters;
public class RemoveEmptyTagsFilter : IDocumentFilter
{
public void Apply(OpenApiDocument swaggerDoc, DocumentFilterContext context)
{
// 步骤1:收集所有有接口的 Tag 名称
var tagsWithOperations = swaggerDoc.Paths.Values
.SelectMany(path => path.Operations.Values)
.SelectMany(op => op.Tags.Select(t => t.Name))
.Distinct()
.ToList();
// 步骤2:移除无接口的空 Tag
var emptyTags = swaggerDoc.Tags.Where(t => !tagsWithOperations.Contains(t.Name)).ToList();
foreach (var tag in emptyTags)
{
swaggerDoc.Tags.Remove(tag);
}
}
}