代码之家  ›  专栏  ›  技术社区  ›  Diego Alves

如何在asp.net core中为“web”和“api”创建路由

  •  1
  • Diego Alves  · 技术社区  · 6 年前

    我想创建用于呈现视图的路由(web路由)和用于管理的路由(api路由)。所以我创建了如下目录结构:

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

    我就是这样定义我的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) 
    

    当我试图生成指向我的web路由的链接时,我被定向到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 回复  |  直到 6 年前
        1
  •  0
  •   Sgedda    6 年前

    一种解决方案是使用区域并创建如下超链接:

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

    enter image description here

    或者您可以手动创建a href;

    <a href="/Produtos/Get/@produto.Slug">Link</a>
    
        2
  •  0
  •   Xueli Chen    6 年前

    更改[ 在您的Web控制器中,如下所示

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