在我的应用程序内部,我的路线似乎有问题。我无法确定路由为什么会失败。该解决方案包含一个从[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
与上述相同的代码一起使用,路由将按预期工作。
答案 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?}