Каков правильный способ получить идентификатор пользователя для служб? ⇐ C#
-
Anonymous
Каков правильный способ получить идентификатор пользователя для служб?
У меня есть контроллер веб-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 к методу действия и установил значения вручную.
Можно ли использовать другой подход, чтобы упростить это?
Мобильная версия