Created
June 20, 2022 08:47
-
-
Save hendrasyp/aaff8018e4205cedda993963514e6654 to your computer and use it in GitHub Desktop.
Swagger Custom Header Parameter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Swagger Init.. | |
service.AddSwaggerGen(opts => | |
{ | |
// Custom header for authorization on swagger | |
opts.OperationFilter<SwaggerOperationFilter>(); | |
opts.OrderActionsBy((apiDesc) => $"{apiDesc.ActionDescriptor.RouteValues["controller"]}_{apiDesc.RelativePath}"); | |
opts.ExampleFilters(); | |
//jangan dipake, malah bikin versioning ga jalan | |
//opts.DocInclusionPredicate((name, api) => true); | |
opts.CustomOperationIds(apiDesc => | |
{ | |
return apiDesc.TryGetMethodInfo(out MethodInfo methodInfo) ? methodInfo.Name : null; | |
}); | |
opts.IgnoreObsoleteActions(); | |
opts.IgnoreObsoleteProperties(); | |
// opts.DocumentFilter<CustomDocumentFilter>(); | |
opts.DocumentFilter<OperationsOrderingFilter>(); | |
// Include Comment | |
var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml"; | |
var xmlPath = Path.Combine(System.AppContext.BaseDirectory, xmlFile); | |
opts.IncludeXmlComments(xmlPath, includeControllerXmlComments: true); | |
opts.EnableAnnotations(); | |
}); | |
using Microsoft.AspNetCore.Http; | |
using Microsoft.Extensions.DependencyInjection; | |
using Microsoft.Extensions.Hosting; | |
using Microsoft.OpenApi.Any; | |
using Microsoft.OpenApi.Models; | |
using Swashbuckle.AspNetCore.SwaggerGen; | |
using System.Collections.Generic; | |
using System.Linq; | |
namespace HOM6.API.Settings.SwaggerConfig | |
{ | |
public class SwaggerOperationFilter : IOperationFilter | |
{ | |
public void Apply(OpenApiOperation operation, OperationFilterContext context) | |
{ | |
#region KONFIGURASI API DESCRIPTION | |
var apiDescription = context.ApiDescription; | |
if (operation.Parameters == null) | |
{ | |
return; | |
} | |
#endregion | |
#region KONFIGURASI HEADER PARAMETER | |
var filterPipeline = context.ApiDescription.ActionDescriptor.FilterDescriptors; | |
var allowAnonymous = (operation.OperationId == "Authentication_Post") || (operation.OperationId == "Authentication_Get"); | |
if (!allowAnonymous) | |
{ | |
var _accessor = new HttpContextAccessor(); | |
var env = _accessor.HttpContext.RequestServices.GetRequiredService<Microsoft.AspNetCore.Hosting.IWebHostEnvironment>(); | |
if (operation.Parameters == null) | |
operation.Parameters = new List<OpenApiParameter>(); | |
if (operation.OperationId.ToString().Contains("BPJS_")) | |
{ | |
if (operation.OperationId.ToString().Equals("BPJS_Authentication_Get")) | |
{ | |
if (env.IsDevelopment()) | |
{ | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-username", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "Nama user", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("hospital") | |
} | |
}); | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-password", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "Password User", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("serverh5n") | |
} | |
}); | |
} | |
else | |
{ | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-username", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "Nama user", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("") | |
} | |
}); | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-password", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "Password User", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("") | |
} | |
}); | |
} | |
} | |
else | |
{ | |
if (env.IsDevelopment()) | |
{ | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-username", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "Nama user", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("hospital") | |
} | |
}); | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-token", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "(BPJS Bridging) Didapat pada saat login (string base64)", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString(HOM6.API.CoreHelpers.BaseConfiguration.Global_Token) | |
} | |
}); | |
} | |
else | |
{ | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-username", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "(BPJS Bridging) Didapat pada saat login (string base64)", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("") | |
} | |
}); | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-token", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "(BPJS Bridging) Didapat pada saat login (string base64)", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("") | |
} | |
}); | |
} | |
} | |
} | |
else | |
{ | |
if (env.IsDevelopment()) | |
{ | |
if (operation.OperationId.ToString().Contains("BPJS_")) | |
{ | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-username", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "Nama user", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("hospital") | |
} | |
}); | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "x-token", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "(BPJS Bridging) Didapat pada saat login (string base64)", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString(HOM6.API.CoreHelpers.BaseConfiguration.Global_Token) | |
} | |
}); | |
} | |
else | |
{ | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "token", | |
In = ParameterLocation.Header, | |
Description = "Didapat pada saat login", | |
Required = false, | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Default = new OpenApiString(HOM6.API.CoreHelpers.BaseConfiguration.Global_Token) | |
} | |
}); | |
} | |
} | |
else | |
{ | |
operation.Parameters.Add(new OpenApiParameter() | |
{ | |
Name = "token", | |
In = ParameterLocation.Header, | |
Required = false, | |
Description = "Didapat pada saat login (string base64)", | |
Schema = new OpenApiSchema | |
{ | |
Type = "String", | |
Example = new OpenApiString("") | |
} | |
}); | |
} | |
var opID = operation.OperationId.ToLower(); | |
//if (opID == "patient_post_savepatientattachment") | |
//{ | |
// operation.Parameters.Clear(); | |
// operation.RequestBody = new OpenApiRequestBody | |
// { | |
// Description = "file to upload", | |
// Content = new Dictionary<string, OpenApiMediaType> | |
// { | |
// { | |
// "multipart/form-data", new OpenApiMediaType | |
// { | |
// Schema = new OpenApiSchema | |
// { | |
// Type = "object", | |
// Required = new HashSet<string>{ "file" }, | |
// Properties = new Dictionary<string, OpenApiSchema> | |
// { | |
// { | |
// "file", new OpenApiSchema() | |
// { | |
// // matches our handcrafted yaml | |
// Type = "string", | |
// Format = "binary" | |
// } | |
// } | |
// } | |
// } | |
// } | |
// } | |
// } | |
// }; | |
// operation.Parameters.Add(new OpenApiParameter() | |
// { | |
// Name = "File", | |
// In = ParameterLocation. | |
// Description = "File Attachment", | |
// Required = true, | |
// Schema = new OpenApiSchema | |
// { | |
// Type = "File", | |
// Example = new OpenApiString("") | |
// } | |
// }); | |
// operation.Parameters.Add(new OpenApiParameter() | |
// { | |
// Name = "MedicalRecordNo", | |
// @in = "formData", | |
// Description = "Nomor Medical Record", | |
// Required = true, | |
// type = "string" | |
// }); | |
// operation.parameters.Add(new Parameter | |
// { | |
// name = "StorageType", | |
// @in = "formData", | |
// description = "Jenis Storage", | |
// required = true, | |
// type = "number", | |
// }); | |
// operation.parameters.Add(new Parameter | |
// { | |
// name = "AttachmentTypeKey", | |
// @in = "formData", | |
// description = "Jenis Attachment", | |
// required = false, | |
// type = "number", | |
// }); | |
// operation.parameters.Add(new Parameter | |
// { | |
// name = "Description", | |
// @in = "formData", | |
// description = "Deskripsi", | |
// required = false, | |
// type = "string", | |
// }); | |
// // operation.consumes.Add("application/form-data"); | |
//} | |
} | |
} | |
#endregion | |
#region REMOVE API Version Header Parameter | |
var parametersToRemove = operation.Parameters.Where(x => x.Name == "api-version").ToList(); | |
foreach (var parameter in parametersToRemove) | |
operation.Parameters.Remove(parameter); | |
#endregion | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment