Создать неоднозначный маршрут на .NET Core MVC - PullRequest
0 голосов
/ 26 марта 2019

Раньше у меня было приложение NET Web API (4.6.2) с неоднозначными маршрутами. Примерно так:

[RoutePrefix(RoutePrefix)]
public class TestController : ApiController
{
public const string RoutePrefix = "test";

[HttpGet, Route("")]
public IHttpActionResult GetAll(Guid uid, [FromUri]int limit, [FromUri]int offset)
{
  // Logic Here.
}

[HttpGet, Route]
public async Task<IHttpActionResult> Test([FromUri]Guid id, [FromUri]int? limit = null, [FromUri]int? offset = null)
{
  // Logic Here.
}
}

Все это работало в прошлом, потому что у меня была эта настройка при запуске:

config.MapHttpAttributeRoutes();

Проблема в том, что я преобразовываю этот API в NET Core MVC API, а параметр MapHttpAttributeRoutes больше не доступен. Это означает, что сейчас у меня возникают некоторые проблемы с неясностью в отношении некоторых действий (например, упомянутых выше).

Я знаю, что одним из способов (и я хочу сделать это в будущем) является наличие определенного маршрута для каждого действия. На данный момент и на основании использования этого API я не могу изменить все маршруты. При всем этом мне было интересно, нашел ли кто-нибудь способ справиться с этой ситуацией без изменения маршрутов?

Спасибо, ребята.

1 Ответ

1 голос
/ 26 марта 2019

Неоднозначный маршрут не поддерживается ASP.NET Core, и, насколько я знаю, на самом деле не поддерживается более поздними версиями даже Web Api.В ASP.NET Core, в частности, происходит маршрутизация коротких замыканий, поэтому он всегда будет принимать первое жизнеспособное совпадение и никогда не будет рассматривать что-либо еще.Единственный вариант - назначить уникальные маршруты каждому действию или объединить логику двух действий в одно действие.

При этом не имеет смысла, почему у вас здесь два разных действияпервое место.Функциональной разницы между ними нет, за исключением того, что первое заполнит значения по умолчанию в параметрах, а второе заполнит нулями.Все параметры действий являются необязательными по умолчанию.Механизм связывания будет автоматически связывать default / null с каждым параметром, если в запросе ничего нет для заполнения. Если вы хотите, чтобы последние два параметра были обнуляемыми, просто используйте эту сигнатуру, а затем вы можете переходить в действие относительно того,не они имеют значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...