Я конвертирую программное обеспечение моего сервера ASP.NET 4.6 в Core.
В моем старом проекте у меня было:
RouteTable.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Затем контроллер с двумя функциями:
[Route("api/v2/users")]
public HttpResponseMessage Get()
[Route("api/v2/users")]
public HttpResponseMessage GetByEmail([FromUri]string Email)
Это сработало.
Теперь в новом проекте у меня тот же контроллер, но без начального шаблона маршрутизации по умолчанию, поскольку я все равно не хотел его использовать.
[Route("api/v2/[controller]")]
public class UsersController : Controller
С теми же двумя функциями
[HttpGet]
public async Task<IActionResult> Get()
[HttpGet]
public async Task<IActionResult> GetByEmail([FromQuery]string email)
Но теперь я получаю исключение AmbiguousActionException.Я знаю, что мог бы существенно оптимизировать это в одну функцию, а также сделать ее более ОТДЫХНОЙ, но вопрос в том, что изменилось?Стало ли ASP.NET Core более строгим?Или я просто что-то упустил?
РЕДАКТИРОВАТЬ: Обе реализации используют один и тот же маршрут для обеих функций - "api / v2 / users" - но в первом нет исключения AmbiguousActionException.Таким образом, это означает, что в этом случае маршрутизатор может различать по параметру запроса, а во втором - нет.Насколько мне известно, это не связано с шаблоном маршрута по умолчанию, так как я все равно его отменял.