Как обрабатывать разные действия с одним и тем же маршрутом и разными атрибутами авторизации в ядре asp .net - PullRequest
0 голосов
/ 07 мая 2018

Я разрабатываю некоторый проект Web-API с ASP.Net Core 2 с использованием некоторого пользовательского промежуточного программного обеспечения, которое переводит информацию об авторизации, полученную от стороннего сервиса, в новую идентификационную информацию о заявках и добавляет ее в пользовательский субъект утверждений в контексте 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) * +1010 *

Как мне добиться этого поведения?

1 Ответ

0 голосов
/ 07 мая 2018

Я думаю, что проблема здесь в том, что роли не являются взаимоисключающими в том, что касается MVC. Кто-то может попасть в оба условия, что делает его неоднозначным. Я думаю, что вам лучше проверить роль пользователя внутри одной функции и предоставить соответствующие результаты.

...