C# 为什么此MVC路由不起作用(ASP.Net Core 2.2)

C# 为什么此MVC路由不起作用(ASP.Net Core 2.2),c#,asp.net,asp.net-mvc,asp.net-core,asp.net-core-mvc,C#,Asp.net,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,我的ASP.Net核心项目中有以下API控制器: [Authorize] [Route("api/[controller]/[action]")] [ApiController] public class PermissionsController : ControllerBase { private readonly PlanraumContext _context; public PermissionsController(PlanraumContext context)

我的ASP.Net核心项目中有以下API控制器:

[Authorize]
[Route("api/[controller]/[action]")]
[ApiController]
public class PermissionsController : ControllerBase
{
    private readonly PlanraumContext _context;

    public PermissionsController(PlanraumContext context)
    {
        _context = context;
    }

    [HttpGet("api/[controller]/group/[action]")]
    public ActionResult Get(int folderId)
    {
        return Ok(new PermissionHelper(_context).GetGroupPermissions(folderId));
    }
}
不幸的是,我无法访问我的函数“Get”。我尝试了以下途径

  • api/权限/组/获取?folderId=6811
  • api/权限/组/获取
  • api/permissions/get?folderId=6811
它们都返回404错误

我的路线有什么问题吗?我没有在startup.cs中配置任何特定内容

app.UseMvc(routes =>
{
    routes.MapRoute(
              name: "default",
              template: "{controller=Home}/{action=Index}/{id?}");
});

因为您正在控制器中放置操作路线 请这样做

在控制器级别上

[Authorize]
[Route("api/[controller]")]
行动层面

[HttpGet("group/[action]/{folderId}")]
如果你不需要团队,那就去做吧

[HttpGet("[action]/{folderId}")]

在您的代码中,
url
将是您在
controller
级别和
action
级别上定义的内容

应用于以/或~/开头的操作的路由模板不与应用于控制器的路由模板组合

您可以在
action
上定义
[Route(“/api/[controller]/group/[action]”)
,它将忽略
controller
级别的路由

[Authorize]
[Route("api/[controller]/[action]")]
[ApiController]
public class PermissionsController : ControllerBase
{
    private readonly PlanraumContext _context;

    public PermissionsController(PlanraumContext context)
    {
        _context = context;
    }

    [Route("/api/[controller]/group/[action]")]
    [HttpGet]
    public ActionResult Get(int folderId)
    {
        return Ok(new PermissionHelper(_context).GetGroupPermissions(folderId));
    }
}

首先,我将删除
HttpGet
属性中的参数,您可能会因为路由不匹配而失败。更改为
[HttpGet]
您正在混合属性和常规属性