Проблема с областью маршрута в Asp.Net Core 2.2 - PullRequest
0 голосов
/ 28 февраля 2019

Внутри моего приложения, похоже, есть проблема с моим маршрутом.Я не могу определить, почему маршрут потерпит неудачу.Решение содержит контроллер, производный от [ApiController] для соблюдения стандартов Web Api.

Area > > > Devices > > > Sampler (Controller)
/api/Devices/Sampler/GetSamples/1
{area:exists}/{controller}/{action}/{id?}

Мое представление о том, что шаблон третьей строки будет коррелировать, представляя первую и вторую строку при использовании MapAreaRoute.

application.UseMvc(routes =>
{
     routes.MapAreaRoute(
          name: "Device Route",
          areaName: "Devices",
          template: "api/{area:exists}/{controller}/{action}/{id?}
     );
}

Даже если я удаляю api из шаблона, укажите область, контроллер и действие, которое я все еще получаю 404.

[ApiController]
[Area("Devices")]
[Route("api/[controller]")]
public class SamplerController : ControllerBase
{
     [HttpGet("{id}")]
     public JsonResult GetSamples(Guid id) => new JsonResult("...");
}

Может кто-нибудь уточнить, почему эта областьне работа?Если я создаю каталог с именем Controllers, то использую MapRoute с тем же кодом, что и выше, маршрут работает так, как задумано.

1 Ответ

0 голосов
/ 28 февраля 2019

Вам необходимо определить область, к которой принадлежит этот контроллер, используя атрибут для документов .

    [Area("Products")]
    public class ManageController : Controller

Обновление: также вы определили api/{area:exists}/{controller}/{action}/{id?} в качестве маршрута и в соответствии с вашими данными.комментарий вы пытаетесь api/devices/sampler/8.Таким образом, используя ваш маршрут в качестве руководства, ваш URL должен быть api/devices/sampler/GetSamples/8.Вам необходимо включить имя действия в URL, так как оно указано в вашем маршруте: api/{area:exists}/{controller}/{action}/{id?}

...