Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8ad43526fc | ||
|
|
e2d30c031d | ||
|
|
9dc4ef7bce |
@@ -8,7 +8,7 @@ using SimApi.Exceptions;
|
|||||||
|
|
||||||
namespace SimApi.Helpers;
|
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 Server { get; init; } = string.Empty;
|
||||||
public string SignName { get; init; } = "sign";
|
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? AppIdName { get; init; } = "appId";
|
||||||
public string[] SignFields { get; init; } = [];
|
public string[] SignFields { get; init; } = [];
|
||||||
|
|
||||||
|
|
||||||
public T? SignQuery<T>(string url, object? body = null, Dictionary<string, string>? queries = null)
|
public T? SignQuery<T>(string url, object? body = null, Dictionary<string, string>? queries = null)
|
||||||
{
|
{
|
||||||
url = Server + url;
|
url = Server + url;
|
||||||
@@ -68,7 +67,17 @@ public class SimApiHttpClient(string? appId, string appKey)
|
|||||||
private T? Query<T>(string url, object? req)
|
private T? Query<T>(string url, object? req)
|
||||||
{
|
{
|
||||||
var http = new HttpClient();
|
var http = new HttpClient();
|
||||||
|
if (debug)
|
||||||
|
{
|
||||||
|
Console.WriteLine($"[HTTPCLIENT请求] {url}\n{SimApiUtil.Json(req)}\n");
|
||||||
|
}
|
||||||
|
|
||||||
var resp = http.PostAsJsonAsync(url, req).Result;
|
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;
|
var res = resp.Content.ReadFromJsonAsync<SimApiBaseResponse<T>>().Result;
|
||||||
if (res == null)
|
if (res == null)
|
||||||
{
|
{
|
||||||
|
|||||||
+16
-2
@@ -1,4 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
@@ -128,6 +129,7 @@ public static class SimApiExtensions
|
|||||||
x.OperationFilter<SimApiSignOperationFilter>();
|
x.OperationFilter<SimApiSignOperationFilter>();
|
||||||
x.OperationFilter<AesBodyOperationFilter>();
|
x.OperationFilter<AesBodyOperationFilter>();
|
||||||
x.SchemaFilter<GlobalDynamicObjectSchemaFilter>();
|
x.SchemaFilter<GlobalDynamicObjectSchemaFilter>();
|
||||||
|
x.DocumentFilter<RemoveEmptyTagsFilter>();
|
||||||
if (simApiOptions.EnableSimApiAuth)
|
if (simApiOptions.EnableSimApiAuth)
|
||||||
{
|
{
|
||||||
x.OperationFilter<SimApiAuthOperationFilter>();
|
x.OperationFilter<SimApiAuthOperationFilter>();
|
||||||
@@ -161,8 +163,15 @@ public static class SimApiExtensions
|
|||||||
new OpenApiSecurityScheme
|
new OpenApiSecurityScheme
|
||||||
{
|
{
|
||||||
Name = "Token",
|
Name = "Token",
|
||||||
In = ParameterLocation.Header
|
In = ParameterLocation.Header,
|
||||||
|
Type = SecuritySchemeType.ApiKey
|
||||||
});
|
});
|
||||||
|
x.AddSecurityRequirement(docs => new OpenApiSecurityRequirement
|
||||||
|
{
|
||||||
|
{
|
||||||
|
new OpenApiSecuritySchemeReference("HeaderToken"), new List<string>()
|
||||||
|
}
|
||||||
|
});
|
||||||
break;
|
break;
|
||||||
case "ClientCredentials":
|
case "ClientCredentials":
|
||||||
oauthFlows.ClientCredentials = new OpenApiOAuthFlow
|
oauthFlows.ClientCredentials = new OpenApiOAuthFlow
|
||||||
@@ -211,6 +220,12 @@ public static class SimApiExtensions
|
|||||||
Description = docOptions.ApiAuth.Description,
|
Description = docOptions.ApiAuth.Description,
|
||||||
In = ParameterLocation.Header
|
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.SwaggerEndpoint($"/swagger/{group.Id}.json", name: group.Name);
|
||||||
}
|
}
|
||||||
|
|
||||||
x.EnableValidator();
|
|
||||||
x.SupportedSubmitMethods(docOptions.SupportedMethod);
|
x.SupportedSubmitMethods(docOptions.SupportedMethod);
|
||||||
x.DisplayRequestDuration();
|
x.DisplayRequestDuration();
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user