This commit is contained in:
2026-05-22 20:26:06 +03:30
parent d8b5abeb93
commit 39452b51ff
4 changed files with 79 additions and 5 deletions
+8
View File
@@ -1,3 +1,5 @@
using System.Collections.Generic;
namespace xCommons.Configurations { namespace xCommons.Configurations {
public partial class XSwaggerConfiguration { public partial class XSwaggerConfiguration {
public string Title { get; set; } = ""; public string Title { get; set; } = "";
@@ -7,6 +9,7 @@ namespace xCommons.Configurations {
public XSwaggerContact Contact { get; set; } = null; public XSwaggerContact Contact { get; set; } = null;
public XSwaggerLicence License { get; set; } = null; public XSwaggerLicence License { get; set; } = null;
public Dictionary<string, string> DefaultValues {get; set;} = null;
} }
public partial class XSwaggerContact { public partial class XSwaggerContact {
@@ -19,4 +22,9 @@ namespace xCommons.Configurations {
public string Name { get; set; } public string Name { get; set; }
public string Url { get; set; } public string Url { get; set; }
} }
public partial class XSwaggerDefaultValues
{
public Dictionary<string, string> Values { get; set; }
}
} }
+21 -4
View File
@@ -45,11 +45,13 @@ namespace xCommons.Extensions {
/// <param name="xmlFilePath"></param> /// <param name="xmlFilePath"></param>
/// <param name="addRequiredXPoweredFilter"></param> /// <param name="addRequiredXPoweredFilter"></param>
/// <param name="addXTokenAuthorization"></param> /// <param name="addXTokenAuthorization"></param>
/// <param name="addDefaultValueFilter"></param>
public static void AddXSwaggerGenOptions ( public static void AddXSwaggerGenOptions (
this SwaggerGenOptions source, this SwaggerGenOptions source,
string xmlFilePath = null, string xmlFilePath = null,
bool addRequiredXPoweredFilter = true, bool addRequiredXPoweredFilter = true,
bool addXTokenAuthorization = true bool addXTokenAuthorization = true,
bool addDefaultValueFilter = true
) { ) {
// //
if (source.IsNull ()) { if (source.IsNull ()) {
@@ -68,6 +70,12 @@ namespace xCommons.Extensions {
source.OperationFilter<RequireXPoweredOperationFilter> (); source.OperationFilter<RequireXPoweredOperationFilter> ();
} }
//
// Add Default Values Filter ...
if (addDefaultValueFilter) {
source.OperationFilter<SwaggerDefaultValuesOperationFilter> ();
}
// //
// Handle XToken Authorizations ... // Handle XToken Authorizations ...
if (addXTokenAuthorization) { if (addXTokenAuthorization) {
@@ -151,13 +159,15 @@ namespace xCommons.Extensions {
/// <param name="xmlFilePath"></param> /// <param name="xmlFilePath"></param>
/// <param name="addRequiredXPoweredFilter"></param> /// <param name="addRequiredXPoweredFilter"></param>
/// <param name="addXTokenAuthorization"></param> /// <param name="addXTokenAuthorization"></param>
/// <param name="addDefaultValueFilter"></param>
public static void AddXSwagger ( public static void AddXSwagger (
this IServiceCollection source, this IServiceCollection source,
IConfiguration configuration, IConfiguration configuration,
SwaggerGenOptions settings = null, SwaggerGenOptions settings = null,
string xmlFilePath = null, string xmlFilePath = null,
bool addRequiredXPoweredFilter = true, bool addRequiredXPoweredFilter = true,
bool addXTokenAuthorization = true bool addXTokenAuthorization = true,
bool addDefaultValueFilter = true
) { ) {
// //
var xSwaggerConfig = configuration.GetXSwaggerConfiguration (); var xSwaggerConfig = configuration.GetXSwaggerConfiguration ();
@@ -165,6 +175,9 @@ namespace xCommons.Extensions {
xSwaggerConfig = new XSwaggerConfiguration (); xSwaggerConfig = new XSwaggerConfiguration ();
} }
//
source.AddSingleton(xSwaggerConfig);
// //
#region Prepare SwaggerGenOptions ... #region Prepare SwaggerGenOptions ...
if (settings.IsNull ()) { if (settings.IsNull ()) {
@@ -172,8 +185,9 @@ namespace xCommons.Extensions {
} }
settings.AddXSwaggerGenOptions ( settings.AddXSwaggerGenOptions (
xmlFilePath: xmlFilePath, xmlFilePath: xmlFilePath,
addRequiredXPoweredFilter: addRequiredXPoweredFilter, addDefaultValueFilter: addDefaultValueFilter,
addXTokenAuthorization: addXTokenAuthorization addXTokenAuthorization: addXTokenAuthorization,
addRequiredXPoweredFilter: addRequiredXPoweredFilter
); );
#endregion #endregion
@@ -242,6 +256,9 @@ namespace xCommons.Extensions {
opt.SwaggerDoc ("v1", apiDoc); opt.SwaggerDoc ("v1", apiDoc);
} }
); );
//
// Register Swagger Operation Filters ...
} }
/// <summary> /// <summary>
@@ -0,0 +1,48 @@
using System.Linq;
using Microsoft.OpenApi.Any;
using Microsoft.OpenApi.Models;
using Swashbuckle.AspNetCore.SwaggerGen;
using xCommons.Configurations;
using xCommons.Extensions;
namespace xCommons.Filters
{
public class SwaggerDefaultValuesOperationFilter : IOperationFilter
{
private readonly XSwaggerConfiguration config;
public SwaggerDefaultValuesOperationFilter(
XSwaggerConfiguration config
)
{
this.config = config;
}
public void Apply(
OpenApiOperation operation,
OperationFilterContext context
)
{
//
// Validate Configuration ...
if (
!config.IsNull() &&
!config.DefaultValues.IsNull() &&
config.DefaultValues.HasChild()
)
{
//
foreach (var prv in config.DefaultValues)
{
//
// Detect Parameter ...
var swaggerParam = operation.Parameters.FirstOrDefault(p => p.Name == prv.Key);
if (!swaggerParam.IsNull())
{
swaggerParam.Schema.Default = new OpenApiString(prv.Value);
}
}
}
}
}
}
+2 -1
View File
@@ -1,7 +1,8 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<configuration> <configuration>
<packageSources> <packageSources>
<!-- <add key="megan" value="https://hub.megan.ir/nuget/index.json" /> -->
<add key="nuget" value="https://api.nuget.org/v3/index.json" protocolVersion="3" /> <add key="nuget" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
<add key="liget" value="https://nuget.saherelmhub.ir/v3/index.json" protocolVersion="3" /> <add key="baget" value="https://nuget.saherelmhub.ir/v3/index.json" protocolVersion="3" disableTLSCertificateValidation="true" />
</packageSources> </packageSources>
</configuration> </configuration>