Каков правильный способ получить идентификатор пользователя для служб? ⇐ C#
Каков правильный способ получить идентификатор пользователя для служб?
У меня есть контроллер веб-API с методом действия, который позволяет пользователям обновлять свою учетную запись.
У меня есть DTO, который я привязываю к методу действия. По соображениям безопасности я не хочу получать UserId из POST, поэтому DTO, который я привязываю к методу действия, не имеет свойства UserId. Вместо этого у него есть только свойства, которые пользователю разрешено обновлять:
публичный класс UpdateAccountRequest { общедоступная обязательная строка Email { get; набор; } = строка.Пусто; общедоступная обязательная строка Пароль {get; набор; } = строка.Пусто; } Затем у меня есть другой DTO, который наследуется от этого DTO запроса, куда я добавляю UserId:
публичный класс UpdateAccountWithUserIdRequest: UpdateAccountRequest { /// /// Убедитесь, что он установлен только контроллером и не принимается в качестве параметра от клиента. /// _НЕ_ включать в клиент JavaScript. /// общественность требуется int UserId {get; набор; } = 0; } Я не хочу получать доступ к контексту HTTP из своих служб, поэтому в методе действия контроллера я создаю объект UpdateAccountWithUserIdRequest, копируя значения из связанного UpdateAccountRequest и используя ClaimsPrincipal, чтобы получить UserId.
Этот подход работает, но выглядит как хак:
[*]Мне нужно создать производный класс с UserId [*]Убедитесь, что я привязал правильный DTO к методу действия и установил значения вручную.
Можно ли использовать другой подход, чтобы упростить это?
У меня есть контроллер веб-API с методом действия, который позволяет пользователям обновлять свою учетную запись.
У меня есть DTO, который я привязываю к методу действия. По соображениям безопасности я не хочу получать UserId из POST, поэтому DTO, который я привязываю к методу действия, не имеет свойства UserId. Вместо этого у него есть только свойства, которые пользователю разрешено обновлять:
публичный класс UpdateAccountRequest { общедоступная обязательная строка Email { get; набор; } = строка.Пусто; общедоступная обязательная строка Пароль {get; набор; } = строка.Пусто; } Затем у меня есть другой DTO, который наследуется от этого DTO запроса, куда я добавляю UserId:
публичный класс UpdateAccountWithUserIdRequest: UpdateAccountRequest { /// /// Убедитесь, что он установлен только контроллером и не принимается в качестве параметра от клиента. /// _НЕ_ включать в клиент JavaScript. /// общественность требуется int UserId {get; набор; } = 0; } Я не хочу получать доступ к контексту HTTP из своих служб, поэтому в методе действия контроллера я создаю объект UpdateAccountWithUserIdRequest, копируя значения из связанного UpdateAccountRequest и используя ClaimsPrincipal, чтобы получить UserId.
Этот подход работает, но выглядит как хак:
[*]Мне нужно создать производный класс с UserId [*]Убедитесь, что я привязал правильный DTO к методу действия и установил значения вручную.
Можно ли использовать другой подход, чтобы упростить это?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Каталог служб WSO2 4.3.0 (произошла ошибка при получении служб из каталога служб.)
Anonymous » » в форуме Apache - 0 Ответы
- 63 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Каталог служб WSO2 4.3.0 (произошла ошибка при получении служб из каталога служб.)
Anonymous » » в форуме JAVA - 0 Ответы
- 31 Просмотры
-
Последнее сообщение Anonymous
-
-
-
«Правильный» способ создания консольного приложения .NET Core без фоновых служб.
Anonymous » » в форуме C# - 0 Ответы
- 14 Просмотры
-
Последнее сообщение Anonymous
-