#c# #asp.net #.net #asp.net-core
Вопрос:
Можно ли выбрать конечную точку на основе роли пользователя в веб-API? Я хотел бы иметь в одном контроллере пару методов для разных ролей, но не смог найти подходящего решения для этого.
Правка: У меня есть типичный пользовательский контроллер с ролевой авторизацией. Я хотел бы иметь два метода в контроллере, например. SearchForAdmin и SearchForUser (оба с URL ../пользователи/поиск). Метод должен быть выбран на основе Роли из токена B2C. Есть какие-нибудь идеи о том, как я мог бы этого достичь?
Комментарии:
1. Можете ли вы поделиться небольшим количеством кода, даже если он не работает, о том, чего вы пытаетесь достичь? Ваш вопрос прямо сейчас довольно расплывчат, поэтому я не уверен, в каком направлении искать решение.
2. @BenMatthews Я обновил вопрос, возможно, теперь он более описательный. Я не начал его внедрять, потому что сначала ищу возможные решения.
Ответ №1:
Функция требуемой авторизации для конечных точек может быть тем, что вы ищете. Я не пробовал это с двумя разными конечными точками с одним и тем же путем, и единственная разница заключается в двух разных политиках, но я знаю, что два пути с разными хостами require будут работать. Например, я знаю, что это работает для меня:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapGet("/Foo", async context =>
{
await context.Response.WriteAsync("Hello World!");
}).RequireHost("Something.com");
endpoints.MapGet("/Foo", async context =>
{
await context.Response.WriteAsync("Hello World From Local!");
}).RequireHost("localhost");
});
Я думаю, что если вы попробуете это, это должно сработать, если оно останется последовательным:
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapGet("/Foo", async context =>
{
await context.Response.WriteAsync("Hello World!");
}).RequireAuthorization("FirstAuthPolicy", "SecondAuthPolicy");
endpoints.MapGet("/Foo", async context =>
{
await context.Response.WriteAsync("Hello World from a second place!");
}).RequireAuthorization("ThirdAuthPolicy");
});