.net core 2 mvc

时间:2018-03-17 04:50:48

标签: c# asp.net-core-2.0 asp.net-core-mvc-2.0

我的ASP.NET核心控制器中有一个动作。此操作有多个路径:

public class TestController
{
    [HttpGet("test1")]
    [HttpGet("test2")]
    public async Task<object> Test()
    {
        //do something
    }
}

这两条路线需要不同的访问权限,如下:

  • 路由:test/test1需要role1权限
  • 路线:test/test2需要role2权限

我覆盖HttpGet类并实现IAuthorizationFilter接口:

public class AuthGet : HttpGet, IAuthorizationFilter
{
    public AuthGet(string template,string roleName) : base(template)
    {
    }
    public void OnAuthorization(AuthorizationFilterContext context)
    {
        //check auth
    }
}

然后,我正在用HttpGet替换AuthGet。这样,AuthGet的OnAuthorization都将执行。但我无法区分test/test1test/test2

如何根据Action上的不同路线确定不同的权限?

1 个答案:

答案 0 :(得分:0)

没有理由将此保留为单一方法。只需创建private方法来完成实际工作,并创建两个只返回private方法值的操作:

[AuthGet("test1", "role1")]
public async Task<object> Test1()
{
    return await Test(1);
}

[AuthGet("test2", "role2")]
public async Task<IActionResult> Test2()
{
    return await Test(2);
}

private async Task<object> Test(int testRoute)
{
    if (testRoute == 1)
    {
        //do something
    }
    else
    {
        // do somthing else
    }
}