powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebApi
23 сообщений из 23, страница 1 из 1
WebApi
    #39501630
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разбираюсь с WebApi.
Вроде все ясно.
Но у меня своя специфика.
Опишу ситуацию.
Авторизуясь, юзер привязывается к заказчику.
В обычном MVC я все данные о заказчике храню в сессии, и все запросы идут в разрезе этого заказчика.
Как это реализовать в WebApi?
Посылая запрос "/api/Order/23456"
Я конечно могу получить все данные по заказчику с id =23456
Но как тогда вынуть конкретный заказ?
Можно сделать еще контроллер, но что то мне не кажется это верным.
В идеале бы, вместе с токеном как то заказчика обозначить?
Подскажите знающие люди.
...
Рейтинг: 0 / 0
WebApi
    #39501650
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а в чем принципиальное отличие то? авторизируй дальше.. если у тебя пользователь привязан к заказчику то на уровне бд наверное есть связка с заказчиком или их много и надо как то выбирать конкртеного? юзер (многие) -> заказчик (1) такая связка?

п.с. особо не вижу смысла хранить заказчика в сесии если у тебя как я выше написал есть связка на уровне бд
...
Рейтинг: 0 / 0
WebApi
    #39501666
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRu,
Связка много ко много.
И полагаю это не принципиально.
В конкретный момент, 1 юзер = 1 заказчик.

Не совсем понимаю, как использовать связь в БД?
Предположим связь 1-1
Тогда на сервере получаю данные по этому юзеру, и в этом разрезе отдаю данные?
...
Рейтинг: 0 / 0
WebApi
    #39501667
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdorВ обычном MVC я все данные о заказчике храню в сессии, и все запросы идут в разрезе этого заказчика.

И в обычном MVC сессия — отвратительный способ привязать пользователя к контексту. Лучший способ, затолкать ID заказчика в тикет авторизации (например, Claim), а данные самого заказчика, если они часто используются для логики обработки запроса, затолкать в кеш.

Это работает и для WebApi.
...
Рейтинг: 0 / 0
WebApi
    #39501670
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdor,

Если в рамках одной авторизации пользователь может работать с разными контекстами (заказчиками), тогда текущий контекст можно передавать либо параметром к каждому запросу, либо в хедерах, либо куки.
...
Рейтинг: 0 / 0
WebApi
    #39501678
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdor,

ваще эт много меняет. у вас 1 клиент может быть пользователем разных заказчиков ну ок тогда как написал хвост дописывайте это в куку или в токен и все.

п.с. а в какой момент вы понимает что клиент у вас относиться к конкретному заказчику?
...
Рейтинг: 0 / 0
WebApi
    #39501694
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuasdor,
п.с. а в какой момент вы понимает что клиент у вас относиться к конкретному заказчику?
Некоторые юзеры имеют несколько заказчиков.
Сразу после входа, выбирают с кем будут работать, далее все в разрезе выбранного.
Ну ясно могут в процессе поменять, тогда в разрезе вновь выбранного.

hVostt Спасибо.
Понял куда копать.
...
Рейтинг: 0 / 0
WebApi
    #39501793
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt...текущий контекст можно передавать либо параметром к каждому запросу...

Вот тут опять в тупике(
А как параметр передать?
Погуглил... что то мимо(
...
Рейтинг: 0 / 0
WebApi
    #39501817
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdorВот тут опять в тупике(
А как параметр передать?
Погуглил... что то мимо(


Погугли

ASP.NET MVC add custom claim
...
Рейтинг: 0 / 0
WebApi
    #39501883
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Наверное я где то туплю, но вот как я это понимаю.
Нет проблем, добавили в клэйм свойств, сохранили.
Но это же все в куках хранится. Т.е. у клиента.
Как это мне поможет?
Мне то надо знать на сервере.
...
Рейтинг: 0 / 0
WebApi
    #39501892
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кажется дошло.
Отсылая токен, мы на сервере, можем получить клэйм.
Верно?
...
Рейтинг: 0 / 0
WebApi
    #39501898
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdorКажется дошло.
Отсылая токен, мы на сервере, можем получить клэйм.
Верно?

При авторизации пользователя генерируется тикет, который хранит некоторую информацию: имя пользователя, роли, клеймы. При каждом запросе на сервер тикет разворачивается контекст безопасности пользователя, откуда всегда можно получить эту информацию. Откуда угодно из кода.

Поэтому это самый верный путь, запихать свой идентификатор заказчика в виде Claim при создании тикета пользователя во время авторизации
...
Рейтинг: 0 / 0
WebApi
    #39502331
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Все понятно. Сделал Claim (пока строго 1 заказчик)
А вот как из обычного контроллера, добраться до него.
Вижу как получает все в GrantResourceOwnerCredentials
Но как инфу от туда в контроллер пропихнуть?
...
Рейтинг: 0 / 0
WebApi
    #39502353
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdor,

Код: c#
1.
2.
3.
4.
5.
6.
7.
[Authorize]
public ActionResult SomeAction()
{
    var identity = (ClaimsIdentity)User.Identity;
    IEnumerable<Claim> claims = identity.Claims;
    ...
}
...
Рейтинг: 0 / 0
WebApi
    #39502382
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
Огромное спасибо!)
А я вокруг до около.
Таких конструкций нагромоздил...)))))
СУПЕР!
И в просто MVC так же можно.
Значит могу похерить сессии!
...
Рейтинг: 0 / 0
WebApi
    #39502680
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С клеймом разобрался.
Спасибо еще раз)
С 1 заказчиком все ясно.
Вот какая мысль если их несколько.
У меня есть таблица UserInCust
В которой прописаны все связи.
Т.е. все заказчики, конкретного юзера.
Есть отдельная форма, где выбирается заказчик, а далее вся работа уже идет с этим заказчиком.
И вот какая мысль.
Если я буду в момент смены заказчика, менять клейм CustId.
И сохранять.
И потом уже везде будет новый клейм.
Это правильно, или опять не то?
Логически, алгоритмически меня это вполне устраивает.
Даже хорошо. Основной заказчик будет тот, который был последним после выхода.
...
Рейтинг: 0 / 0
WebApi
    #39502910
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asdorЕсть отдельная форма, где выбирается заказчик, а далее вся работа уже идет с этим заказчиком.

Если в рамках одной авторизации несколько разных заказчиков, то на выбор: куки, передаваемый параметр в каждом запросе, или в URL.


asdorЕсли я буду в момент смены заказчика, менять клейм CustId.
И сохранять.

Можно перевыпускать тикет да, типа делать переавторизацию с новыми Claims. Это хорошее решение, если работа в рамках одного заказчика долговременно, пользователю не надо очень быстро переключаться между ними постоянно.


asdorИ потом уже везде будет новый клейм.
Это правильно, или опять не то?
Логически, алгоритмически меня это вполне устраивает.
Даже хорошо. Основной заказчик будет тот, который был последним после выхода.

Да, нормально.
...
Рейтинг: 0 / 0
WebApi
    #39632194
Фотография Sliva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

так разбираюсь с WepApi и такой вопрос.
Есть слой сервисов, который возвращает ViewModel.
В интернете не нашел примеров где ApiController-ы работают с ViewModel, везде напрямую возвращают сущности DbContext-а
На сколько правильно возвращать ViewModel ведь возвращаем json?
...
Рейтинг: 0 / 0
WebApi
    #39632265
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sliva,

если ваши модели настолько простые что представляют сущностями бд то возвращайте их.

имхо разделение на модели дело вкуса. вы пишете что вы возвращает из сервисов вьюмодель. а я вот считаю что сервисы работаю с моделями предметной области(даж сущностями бд), а потом уже идет преобразование во вью модель. а можно просто херачить напрямую сущности бд. Все зависит от задачи.
...
Рейтинг: 0 / 0
WebApi
    #39632271
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuесли ваши модели настолько простые что представляют сущностями бд то возвращайте их.
+1
если Модель правильная, нормализованная, то нет проблем.
...
Рейтинг: 0 / 0
WebApi
    #39632461
Фотография Sliva
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuSliva,

если ваши модели настолько простые что представляют сущностями бд то возвращайте их.

имхо разделение на модели дело вкуса. вы пишете что вы возвращает из сервисов вьюмодель. а я вот считаю что сервисы работаю с моделями предметной области(даж сущностями бд), а потом уже идет преобразование во вью модель. а можно просто херачить напрямую сущности бд. Все зависит от задачи.

Вьюмодели простые. Сервисный слой получает вьюмодель, производит какую то логику, маппит в сущность бд и отдает эту сущность репе.

handmadeFromRu а можно просто херачить напрямую сущности бд. Все зависит от задачи.

задача вернуть набор данных из бд. Напрямую из контроллера лесть в репу как-то не айс.
...
Рейтинг: 0 / 0
WebApi
    #39632474
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlivaНапрямую из контроллера лесть в репу как-то не айс.нормально.
У вас не бизнес логики на АппСервере.
У вас просто API для отдачи наружу сущностей.
Всё.
Т.е. это REST сервис как в любом ЯП. Той же Java.
...
Рейтинг: 0 / 0
WebApi
    #39632526
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SlivahVostt,
Напрямую из контроллера лесть в репу как-то не айс.


ну я не говорил что это хорошее решение)
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / WebApi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]