Разница в маршрутизации между ASP.NET 4.6 и Core - PullRequest
0 голосов
/ 16 ноября 2018

Я конвертирую программное обеспечение моего сервера 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.Таким образом, это означает, что в этом случае маршрутизатор может различать по параметру запроса, а во втором - нет.Насколько мне известно, это не связано с шаблоном маршрута по умолчанию, так как я все равно его отменял.

...