У меня есть этот контроллер и метод действия:
[ApiController]
[Route("api/[controller]")]
public class AppointmentController : ControllerBase
{
[Route("{provider}/AvailableSlots")]
[HttpGet]
public Task<AvailableSlotsResponse> GetAvailableSlots(Request<AvailableSlotsRequest> request)
{
return null;
}
}
Вот модель:
public class Request<T> where T : class
{
[FromRoute]
public string Provider { get; set; }
[FromQuery(Name = "")]
public T Model { get; set; }
}
public class AvailableSlotsRequest
{
//[FromQuery(Name = "Location")] //Would prefer not to have to use this
public string Location { get; set; }
}
Мне нужно использовать Location
в качестве имени параметра запроса в URL длячтобы достичь конечной точки, как и ожидалось.
напр.http://localhost/api/Appointment/Company/AvailableSlots?Location=SYD
Однако, когда я просматриваю страницу Swagger, параметр называется Model.Location
, что сбивает с толку потребителей моего API:
![swagger](https://i.stack.imgur.com/aCbzZ.jpg)
Я могу использовать [FromQuery(Name = "Location")]
, чтобы заставить Swagger отображать Location
, однако это выглядит очень избыточно и дублирует имя свойства.
Вот мой Swagger, настроенный в ConfigureServices()
:
services.AddSwaggerDocument(document =>
{
document.PostProcess = d =>
{
d.Info.Version = Configuration["APIVersion"];
d.Info.Title = $"{Configuration["ApplicationName"]} {Configuration["DomainName"]} API";
};
});
Как сделать так, чтобы Swagger отображал Location
вместо Model.Location
, без необходимости дублировать слово "Location" в атрибуте [FromQuery]
?