Как я могу создать маршруты для "веб" и "API" в ядре asp.net - PullRequest
0 голосов
/ 25 декабря 2018

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

 controllers //root controller folder
    ProductController
    Api //subfolder of controllers folder
       Productcontroller

У меня есть классы с одинаковыми именами, и они портят мои маршруты.«API-маршруты» перекрывают «веб-маршруты».

Вот как я определил свои API-маршруты

namespace Loja.Controllers.Api

[Produces("application/json")]
[Route("api/Produtos")]
public class ProdutosController : Controller
{
     // GET: api/<controller>
     [HttpGet]
     public IEnumerable<string> Get()
     {
        return new string[] { "value1", "value2" };
     }
}

Вот как я определил свои веб-маршруты:

namespace Loja.Controllers
{
    public class ProdutosController : Controller
    {
        [Route("/produtos/{slug}")]
        public IActionResult Get(string slug) 

Когда я пытаюсь сгенерировать ссылку на свой веб-маршрут, меня направляют на маршрут API.Почему?

<a asp-controller="Produtos" asp-action="Get"  asp-route-slug="@produto.Slug">

Когда я нажимаю на ссылку, меня направляют на

http://localhost:5000/api/produtos?slug=assadeira-grande-40-x-27-cm-109dcc

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Измените [ Route ("/ produtos / {slug}")] в вашем веб-контроллере, как показано ниже

namespace Loja.Controllers
{
public class ProdutosController : Controller
{
    [Route("/produtos/Get/{slug}")]
    public IActionResult Get(string slug)
0 голосов
/ 25 декабря 2018

Одним из решений является использование областей и создание гиперссылки, как показано ниже:

<a asp-area="Public" asp-controller="Home" asp-action="About">Test</a>

enter image description here

Или вы можете вручную создать ссылку;

<a href="/Produtos/Get/@produto.Slug">Link</a>
...