Я знаю, что есть много вопросов с одинаковым названием, но этот отличается.
Я получал эту ошибку на своем контроллере продукта, поэтому для исследования проблемы я создал демо-контроллер в ASP.NET Web API 2. Демоконтроллер.cs
namespace WMWebAPIControllers.Controllers
{
[RoutePrefix("api/Demo")]
public class DemoController : ControllerBase
{
[HttpGet]
[Route("")]
public async Task<IHttpActionResult> GetProducts(int CatalogType, string ProductNo)
{
return Ok();
}
}}
Странно то, что демо-контроллер имеет только один метод. Не существует метода, с помощью которого swagger нашло бы двусмысленность.
Я не понимаю проблемы. Ниже приведена ошибка чванства.
500 : {"message":"An error has occurred.","exceptionMessage":"Not supported by Swagger 2.0: Multiple operations with path 'api/Demo' and method 'GET'. See the config setting - \"ResolveConflictingActions\" for a potential workaround","exceptionType":"System.NotSupportedException"
@AndreiDragotonu Где я могу найти временные файлы Windows\Framework32 и 64?
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files, а также Framework64. вам нужно будет обновиться до того места, где вы находитесь
Я создал другой проект с тем же контроллером, и он отлично работает.
@AndreiDragotonu Я удалил все папки в Framework64. В папке Framework не было папки ASP.NET Files. Я очистил решение, удалил папки obj и bin и перезапустил всю машину. Но ошибка сохраняется
Я не мог понять проблему в этом контроллере, но я нашел проблему в моем основном контроллере. У него был один публичный метод и один метод с [route("")]. Это вызывало двусмысленность. Я пометил общедоступный метод как [NonAction], и ошибка Swagger исчезла.
Проблема заключалась в том, что у меня был один общедоступный метод без атрибута маршрута. Таким образом, swagger обнаружил двусмысленность в методе GetProducts(), который был настроен для пустого маршрута.
Пометил этот общедоступный метод как атрибут [NonAction], и проблема решена.
Его также можно пометить как частный/защищенный, чтобы решить эту проблему, но в моем случае это был метод интерфейса.
Надеюсь, это поможет кому-то.
Это оказалось моей проблемой
вы уверены, что у вас нет старых DLL? возможно, вы переименовали проект, обновили имя dll. Выполните очистку в Visual Studio, затем проверьте папки bin/obj и, наконец, удалите временные файлы Windows\Framework32 и 64. Когда все будет готово, перезагрузите Visual Studio и повторите попытку.