Я документирую API моего приложения через Swagger, который работает с проверкой через токен сеанса, то есть, через имя пользователя и пароль в течение определенного времени генерируется токен, который позволяет пользователю перемещаться по сайту. Мне нужно, чтобы swagger автоматически захватывал этот токен сеанса и помещал его в заголовок запросов для остальных методов API. Единственное, чего я мог достичь, это передать токен как параметр, но сделать это вручную , Идея состоит в том, чтобы сделать его автоматизированным c. Я оставляю конфигурацию SwaggerConfig.cs, которую я несу на данный момент.
public class SwaggerConfig
{
public static void Register()
{
var thisAssembly = typeof(SwaggerConfig).Assembly;
GlobalConfiguration.Configuration
// HABILITAMOS SWAGGER.
.EnableSwagger(c =>
{
var baseDirectory = AppDomain.CurrentDomain.BaseDirectory + @"\bin\";
var commentsFileName = Assembly.GetExecutingAssembly().GetName().Name + ".xml";
var commentsFile = Path.Combine(baseDirectory, commentsFileName);
c.SingleApiVersion("v1", "API");
c.OperationFilter<AddRequiredHeaderParameter>();
c.PrettyPrint();
c.ApiKey("apikey")
.Description("API Key Authentication")
.Name("Bearer")
.In("header");
c.IgnoreObsoleteActions();
c.IgnoreObsoleteProperties();
c.DescribeAllEnumsAsStrings();
.EnableSwaggerUi(c =>
{ c.DocumentTitle("Documentación API");
c.EnableApiKeySupport("apikey", "header");
});
}
}
В свою очередь, добавьте класс для проверки приложения, из которого оно сделано по запросу
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Swashbuckle.Swagger.Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null)
operation.parameters = new List<Parameter>();
operation.parameters.Add(new Parameter
{
name = "AuthorizedClient",
@in = "header",
type = "intenger",
description = "Aplicacion",
required = true,
@default = axaxax
});
operation.parameters.Add(new Parameter
{
name = "ClientKey",
@in = "header",
type = "string",
description = "Cliente",
required = true,
@default = "bxbxbx"
});
operation.parameters.Add(new Parameter
{
name = "Authorization",
@in = "header",
type = "apikey",
description = "Token de sesión",
});
}
}