Asp.Net Core 2.2中的区域路由问题

时间:2019-02-27 21:22:34

标签: c# asp.net .net asp.net-core asp.net-core-webapi

在我的应用程序内部,我的路线似乎有问题。我无法确定路由为什么会失败。该解决方案包含一个从[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 :(得分:1)

您需要使用属性per the docs定义此控制器所属的区域。

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

更新: 另外,您将api/{area:exists}/{controller}/{action}/{id?}定义为路线,并根据您的评论尝试api/devices/sampler/8。因此,以您的路线为指导,您的网址应为api/devices/sampler/GetSamples/8。您需要在网址中包含操作名称,因为这是您在路线中的布局方式:api/{area:exists}/{controller}/{action}/{id?}