如何在asp.net核心中为“ Web”和“ API”创建路由

时间:2018-12-25 13:45:03

标签: asp.net-core routes asp.net-core-mvc asp.net-core-2.1

我想创建用于渲染视图的路由(Web路由)和用于管理目的的路由(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 :(得分:0)

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

req.files

enter image description here

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

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

答案 1 :(得分:0)

在如下所示的Web控制器中更改[ Route(“ / produtos / {slug}”)]

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