AmbiguousMatchException: The request matched multiple endpoints хотя нет одинаковых роутов
Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
var app = builder.Build();
app.UseHttpsRedirection();
app.MapControllers();
app.Run();
В контроллере:
[ApiController]
[Route("[controller]")]
public class CurrencyController : ControllerBase
{
[HttpGet]
[ActionName("currency")]
public async Task<Valute> GetCurrency(string id)
{
var item = (await GetItems()).FirstOrDefault(x => x.Id == id);
return item;
}
[HttpGet]
[ActionName("currencies")]
public async Task<IEnumerable<Valute>> GetCurrenciesPaged(CurrencyPageParameters @params)
{
var data = (await GetItems()).Skip((@params.PageNumber - 1) * @params.PageSize).Take(@params.PageSize);
return data;
}
private async Task<IEnumerable<Valute>> GetItems()
{
var client = new HttpClient();
var content = await client.GetAsync("https://www.cbr-xml-daily.ru/daily_json.js");
string json = await content.Content.ReadAsStringAsync();
var obj = JObject.Parse(json)["Valute"].ToString();
return JsonConvert.DeserializeObject<Dictionary<string, Valute>>(obj).Select(x => x.Value);
}
}
Гуглил данную проблему как у меня, но везде в вопросах пишутся одинаковые роуты и понятно почему ломается, но почему ломается у меня - не пойму. У меня только 1 контроллер с двумя роутами, откуда несколько совпадений? Когда убираю метод GetCurrenciesPaged, то всё нормально работает. В чем может быть дело?
Ответы (1 шт):
Автор решения: Aarnihauta
→ Ссылка
Не знаю почему оно ругалось, но я изменил атрибуты над методами следующим образом:
[HttpGet("{id}")] //по существу изменил только вот это, добавил параметр.
[ActionName("currency")]
public async Task<Valute> GetCurrency(string id) {//}
[HttpGet]
[ActionName("currencies")]
public async Task<IEnumerable<Valute>> Currencies([FromQuery] CurrencyPageParameters @params)
Если найдется знающий человек и даст нормальный ответ - буду только рад)