WEB API Swagger error
Всем привет. Пытаюсь к своей API добавить swagger. Проект был создан по дефолтному шаблону Web API. Добавил свои методы, реализацию. Однако на данный момент при запуске появляется такая ошибка:
My controller Code:
using Microsoft.AspNetCore.Mvc;
using Microsoft.Extensions.Logging;
using QiraTestApp.Filters;
using QiraTestApp.Interfaces;
using QiraTestApp.Models;
using QiraTestApp.Services;
using System;
using System.Collections.Generic;
using System.Linq;
namespace QiraTestApp.Controllers
{
[ApiController]
[Route("[controller]")]
public class InvoiceController : ControllerBase
{
private readonly IInvoice _invoice;
private readonly ILogger<InvoiceController> _logger;
public InvoiceController(ILogger<InvoiceController> logger, IInvoice invoice)
{
_invoice = invoice;
_logger = logger;
}
[HttpGet]
public IEnumerable<Invoice> GetAllInvoices([FromQuery] PaginationFilter filter, InvoiceRequest invoiceRequest)
{
try
{
return _invoice.GetAllInvoices(invoiceRequest).Skip((filter.PageNumber - 1) * filter.PageSize)
.Take(filter.PageSize)
.ToList();
}
catch (Exception ex)
{
throw new InvoiceException($"You cannot get all Invoices, because: {ex.Message}", ex);
}
}
[HttpGet]
public Invoice GetInvoiceById(int Id)
{
try
{
return _invoice.GetInvoiceById(Id);
}
catch (Exception ex)
{
throw new InvoiceException($"We got a problem while getting Invoice: {ex.Message}", ex);
}
}
[HttpPost]
public bool CreateInvoice(Invoice invoice)
{
try
{
return _invoice.CreateInvoice(invoice);
}
catch (Exception ex)
{
throw new InvoiceException($"We got a problem while creating Invoice: {ex.Message}", ex);
}
}
[HttpPut]
public bool UpdateInvoice(Invoice invoice)
{
try
{
return _invoice.UpdateInvoice(invoice);
}
catch (Exception ex)
{
throw new InvoiceException($"We got a problem while updating Invoice: {ex.Message}", ex);
}
}
}
}
My startUp code:
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.OpenApi.Models;
using QiraTestApp.Interfaces;
using QiraTestApp.Repository;
using QiraTestApp.Services;
namespace QiraTestApp
{
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
services.AddTransient<IInvoice, CSVService>(); // DBService for .NET EF Core implementation
services.AddControllers();
services.AddSwaggerGen(c =>
{
c.SwaggerDoc("v1", new OpenApiInfo { Title = "QiraTestApp", Version = "v1" });
});
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseSwagger();
app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "QiraTestApp v1"));
}
app.UseHttpsRedirection();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
});
}
}
}
Кто-то может подсказать где ошибка?
Ответы (1 шт):
Автор решения: Kanoka
→ Ссылка
Ваши методы GetAllInvoices и GetInvoiceById имеют одинаковые Route к методам. Необходимо уточнить путь хотя бы для одного из них.
Например, уточнить url метода получения всех элементов
[HttpGet("list")]
public IEnumerable<Invoice> GetAllInvoices([FromQuery] PaginationFilter filter, InvoiceRequest invoiceRequest)
или передавать id объекта не в query string
[HttpGet("{id}")]
public Invoice GetInvoiceById(int id)
