У меня конечная точка API ASP.NET Core 3.1 настроена следующим образом:
[HttpGet("api/controller/action/{id}")]
public async Task<IActionResult> GetSingle([FromRoute] GetSingleRequest request) {...}
DTO имеет единственное свойство Guid:
public class GetSingleRequest
{
public Guid Id { get; set; }
}
Я настроил привязку пользовательской модели для привязки свойств Guid к строковым значениям, поскольку я использую короткую реализацию guid. Все это работает нормально при тестировании с помощью Postman.
Однако при использовании Swagger вместо передачи введенного параметра маршрута он передает шаблон параметра, например.
GET /api/controller/action/{id} // Literally constructs the URI with {id}
GET /api/controller/action/abcd1234 // Not the value as entered
Я пробовал использовать MapType
и ISchemaFilter
следующим образом:
// startup.cs
c.MapType<Guid>(() => new OpenApiSchema {Type = "string", Format = null});
// startup.cs
c.SchemaFilter<GuidSchemaFilter>();
// GuidSchemaFilter.cs
internal class GuidSchemaFilter : ISchemaFilter
{
public void Apply(OpenApiSchema schema, SchemaFilterContext context)
{
if (context.Type != typeof(Guid))
{
return;
}
schema.Type = "string";
schema.Format = null;
}
}
Ни один из этих подходов не меняет этого странного поведения.
Как я могу настроить Swagger для передачи строки вместо Guid как части URI, когда у меня настроено настраиваемое связыватель модели?