This is the first time I've experienced this in my entire application. I have a new controller defined as such
[Authorize]
[ApiController]
public class AdvertisementsController : ControllerBase
{
private readonly IAdvertisementStore _store;
private readonly IGetAdvertisementDashboardUseCase _dashboard;
private JsonPresenter jsonPresenter = new JsonPresenter();
private ViewModelPresenter<AdvertisementListViewModel> adListPresenter = new ViewModelPresenter<AdvertisementListViewModel>();
private ViewModelPresenter<AdvertisementDetailsViewModel> adDetailsPresenter = new ViewModelPresenter<AdvertisementDetailsViewModel>();
private ViewModelPresenter<AdvertisementDashboardViewModel> dashboardPresenter = new ViewModelPresenter<AdvertisementDashboardViewModel>();
public AdvertisementsController(IAdvertisementStore advertisementStore,
IGetAdvertisementDashboardUseCase getAdvertisementDashboardUseCase)
{
_store = advertisementStore;
_dashboard = getAdvertisementDashboardUseCase;
}
[HttpPost]
[ValidateModel]
[Route("api/advertisement")]
[Authorize(Policy = Policies.ADVERTISEMENTS)]
public async Task<ActionResult<GenericResponse>> CreateAdvertisement([FromBody] AdvertisementRequest request)
{
await _store.Handle(AccessEvent.Create, request, jsonPresenter);
return jsonPresenter.ContentResult;
}
[HttpGet]
[ValidateModel]
[Route("api/advertisement")]
[Authorize(Policy = Policies.ADVERTISEMENTS)]
public async Task<ActionResult<AdvertisementDetailsViewModel>> GetAdvertisement([FromQuery] GenericRequest request)
{
await _store.Handle(AccessEvent.Read, request, adDetailsPresenter);
return adDetailsPresenter.ContentResult;
}
[HttpGet]
[ValidateModel]
[Route("api/advertisements")]
[Authorize(Policy = Policies.ADVERTISEMENTS)]
public async Task<ActionResult<AdvertisementListViewModel>> GetAdvertisements([FromQuery] AdvertisementPaginatingRequest request)
{
await _store.Handle(AccessEvent.ReadList, request, adListPresenter);
return adListPresenter.ContentResult;
}
[HttpPut]
[ValidateModel]
[Route("api/advertisement")]
[Authorize(Policy = Policies.ADVERTISEMENTS)]
public async Task<ActionResult<GenericResponse>> EditAdvertisement([FromBody] AdvertisementRequest request)
{
await _store.Handle(AccessEvent.Update, request, jsonPresenter);
return jsonPresenter.ContentResult;
}
[HttpDelete]
[ValidateModel]
[Route("api/advertisement")]
[Authorize(Policy = Policies.ADVERTISEMENTS)]
public async Task<ActionResult<GenericResponse>> DeleteAdvertisement([FromQuery] GenericRequest request)
{
await _store.Handle(AccessEvent.Delete, request, jsonPresenter);
return jsonPresenter.ContentResult;
}
[HttpGet]
[ValidateModel]
[Route("api/advertisement_dashboard")]
[Authorize(Policy = Policies.ADVERTISEMENTS)]
public async Task<ActionResult<AdvertisementDashboardViewModel>> Dashboard([FromQuery] AdvertisementDashboardListRequest request)
{
await _dashboard.Handle(request, dashboardPresenter);
return dashboardPresenter.ContentResult;
}
}
Looks just like everyone of my other controllers.
For some reason on my Swagger UI the GET api/advertisements
and GET api/advertisement_dashboard
endpoints return the following error when I try to execute it
But as soon as I change the name to api/advertisementts
or api/advertisementt_dashboard
(adding a random t to the route names) it works just fine. This is only an issue using Swagger UI though, making a cURL request or using Postman the endpoints work just fine. Seems like swagger isn't correctly finding those endpoints for some reason?
Relevant Swagger.json schema
"/api/advertisement": {
"post": {
"tags": [
"Advertisements"
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
}
}
}
}
},
"get": {
"tags": [
"Advertisements"
],
"parameters": [
{
"name": "Id",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "AdditionalArg",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/AdvertisementDetailsViewModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementDetailsViewModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementDetailsViewModel"
}
}
}
}
}
},
"put": {
"tags": [
"Advertisements"
],
"requestBody": {
"content": {
"application/json-patch+json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
},
"application/*+json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementRequest"
}
}
}
},
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
}
}
}
}
},
"delete": {
"tags": [
"Advertisements"
],
"parameters": [
{
"name": "Id",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "AdditionalArg",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/GenericResponse"
}
}
}
}
}
}
},
"/api/advertisements": {
"get": {
"tags": [
"Advertisements"
],
"parameters": [
{
"name": "Type",
"in": "query",
"schema": {
"$ref": "#/components/schemas/AdvertisementType"
}
},
{
"name": "Status",
"in": "query",
"schema": {
"$ref": "#/components/schemas/AdvertisementStatus"
}
},
{
"name": "StartDate",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "EndDate",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "Take",
"in": "query",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "Skip",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "SearchField",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/AdvertisementListViewModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementListViewModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementListViewModel"
}
}
}
}
}
}
},
"/api/advertisement_dashboard": {
"get": {
"tags": [
"Advertisements"
],
"parameters": [
{
"name": "PlatformIds",
"in": "query",
"schema": {
"type": "array",
"items": {
"type": "integer",
"format": "int32"
}
}
},
{
"name": "StartDate",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "EndDate",
"in": "query",
"schema": {
"type": "string",
"format": "date-time"
}
},
{
"name": "Take",
"in": "query",
"required": true,
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "Skip",
"in": "query",
"schema": {
"type": "integer",
"format": "int32"
}
},
{
"name": "SearchField",
"in": "query",
"schema": {
"type": "string"
}
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"text/plain": {
"schema": {
"$ref": "#/components/schemas/AdvertisementDashboardViewModel"
}
},
"application/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementDashboardViewModel"
}
},
"text/json": {
"schema": {
"$ref": "#/components/schemas/AdvertisementDashboardViewModel"
}
}
}
}
}
}
}
I'd rather not change my naming convention just so I can use Swagger to test out my endpoints.