我已经解决了错误的路由设置问题,该问题已得到修复,但是我不完全理解为什么该修复程序有效。
[ApiController]
[Route("api/[controller]")
public class DetailsController : ControllerBase
{
[HttpGet]
[Route("api/[controller]/{transactNo}")]
public IActionResult Detail(int transactNo)
{
...
当我打电话给api/details/123
时,直到从类中删除了Route
属性之前,我都找不到路由。所以我猜他们在冲突,但是为什么呢?
答案 0 :(得分:2)
在控制器上放置RouteAttribute
不同于在操作上放置https://localhost:44338/api/details/api/details/1
^^^^^^^^^^^ ^^^^^^^^^^^^^
from controller ^
from action
。
这意味着当您同时添加两个属性时,便可以在以下位置调用操作:
const data = [{'group':'1', 'name':'name1'},
{'group':'2', 'name':'name2'},
{'group':'2', 'name':'name3'},
,{'group':'1', 'name':'name4'}];
const groups = data .map( i => i.group);
const uniqueGroups = Array.from(new Set(groups));
const groupes = uniqueGroups.map( c => {
return { group:c, names:[]};
} );
group.forEach( g => {
groupes.find( gg => gg.group === g.group).names.push(g.name);
});
答案 1 :(得分:1)
端点的路由是控制器的路由api/[controller]
与操作的路由api/[controller]/{transactNo}
串联。
在您的情况下,端点的路由为api/[controller]/api/[controller]/{transactNo}
。
您需要简化操作路线,如:
[HttpGet]
[Route("{transactNo}")]
public IActionResult Detail(int transactNo)
{
如果只想从操作中重新定义端点的路由,则操作的路由必须以/
开头:
[HttpGet]
[Route("/api/[controller]/{transactNo}")]
public IActionResult Detail(int transactNo)
{
答案 2 :(得分:1)
您可以将活动的路由属性替换为Product
,并将控制器上的路由属性更改为[HttpGet("{transactNo}")]
[Route("api/[controller]/[action]")]
现在您可以调用以下网址:[ApiController]
[Route("api/[controller]/[action]")]
public class DetailsController : ControllerBase
{
[HttpGet("{transactNo}")]
public IActionResult Detail(int transactNo)
{
...
}
}