我的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/test1
和test/test2
。
如何根据Action
上的不同路线确定不同的权限?
答案 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
}
}