如何在 asp .net 核心中处理具有相同路由和不同授权属性的不同操作

How to handle different action with same route and different authorize attribute in asp .net core

我正在开发一些带有 ASP.Net Core 2 的 Web-API 项目,使用一些自定义中间件将它从第 3 方服务获得的授权信息转换为新的 Claim Identity 和将其添加到 http 上下文用户声明主体。我还实现了一些自定义授权策略提供程序,它检查添加的声明身份以获得所需的权限和角色。

现在我想在同一控制器上使用相同的路由执行如下两个操作:

[Route("api/[controller]")]
public class StatesController : Controller
{

[Authorize("PaiedUser")]
[HttpGet(Name = "GetStates")]
public IActionResult GetStatesPaied(StateHttpRequestParameter requestResourceParameter)
{ //some code here to handle the paied user request} 

[Authorize("FreeUser")]
[HttpGet(Name = "GetStates")]
public IActionResult GetStatesFree(StateHttpRequestParameter requestResourceParameter)
{ //some code here to handle the free user request}
}

在运行时我遇到了这个异常,

Microsoft.AspNetCore.Mvc.Internal.AmbiguousActionException: 多个动作匹配。以下操作匹配路由数据并满足所有约束:

SaMonitoring.API.Controllers.StatesController.GetStatesFree(SaMonitoring.API) SaMonitoring.API.Controllers.StatesController.GetStatesPaied(SaMonitoring.API)

我怎样才能实现这种行为?

我认为这里的问题是就 MVC 而言,角色并不相互排斥。有人可能会同时陷入这两种情况,这使得它变得模棱两可。我认为您最好在单个函数中检查用户的角色并适当地提供结果。