asp.net core MapControllerRoute не соответствует моему маршруту (авторизация не запускается)

#c# #.net #asp.net-core #.net-core

#c# #.net #asp.net-core #.net-core

Вопрос:

Я использую ASP.NET Ядро 3.1.5, и у меня есть следующий код:

 app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "UserAccessRoutes",
                pattern:  "UserAccess/GetUsers/{id?}",
                defaults: new { controller = "UserAccess", action = "GetUsers" }
            ).RequireAuthorization(new AuthoriseAttribute("Test"));


            endpoints.MapControllerRoute("default", "{controller}/{action}/{id?}");
        });
        
        
public class UserAccessController : ControllerBase
{
    private readonly IUsersService usersService;

    public UserAccessController(IUsersService usersService)
    {
        this.usersService = usersService;
    }

    [HttpGet]
    public async Task<UserServerDto> GetUsers(long serverId)
    {
        ...somecode
    }
}
  

Когда я вызываю http://localhost:5000/useraccess/getusers?id=10 вызывается getUsers, но он пропускает пользовательский атрибут авторизации. Почему он не соответствует первому маршруту карты?

Комментарии:

1. Вы добавили вызов app.UseAuthorization() в свой Startup класс?

2. Да, я это сделал. Если я использую атрибут авторизации непосредственно в методе контроллера, он работает. Когда я использую его, как в моем посте, авторизация не работает.

3. И каков ваш код для определения Test политики? Кроме того, я заметил, что атрибут Authorise , с s , так это пользовательский атрибут?

4. Я только что узнал, что перегрузка для RequireAuthorization принимает мой вызов как IAuthorizeData перегрузку, поэтому он проверяет политику и пользовательский атрибут, который у меня есть, и использует пользовательские разрешения, не работает.

5. Насколько я знаю, new AuthoriseAttribute("Test") это означает, что он будет использовать политику тестирования. Вы установили политику тестирования? Если возможно, пожалуйста, опубликуйте соответствующие коды политики тестирования. Кроме того, если вы хотите использовать RequireAuthorization для работы с политикой, я предлагаю вам напрямую установить имя политики в качестве параметра, подобного этому .RequireAuthorization("Test") .