#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")
.