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

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

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

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

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

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

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

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

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

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


Погугли

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

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

Поэтому это самый верный путь, запихать свой идентификатор заказчика в виде Claim при создании тикета пользователя во время авторизации
...
Рейтинг: 0 / 0
09.08.2017, 09:29
    #39502331
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebApi
hVostt,
Все понятно. Сделал Claim (пока строго 1 заказчик)
А вот как из обычного контроллера, добраться до него.
Вижу как получает все в GrantResourceOwnerCredentials
Но как инфу от туда в контроллер пропихнуть?
...
Рейтинг: 0 / 0
09.08.2017, 09:59
    #39502353
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebApi
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
09.08.2017, 10:37
    #39502382
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebApi
hVostt,
Огромное спасибо!)
А я вокруг до около.
Таких конструкций нагромоздил...)))))
СУПЕР!
И в просто MVC так же можно.
Значит могу похерить сессии!
...
Рейтинг: 0 / 0
09.08.2017, 15:24
    #39502680
asdor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebApi
С клеймом разобрался.
Спасибо еще раз)
С 1 заказчиком все ясно.
Вот какая мысль если их несколько.
У меня есть таблица UserInCust
В которой прописаны все связи.
Т.е. все заказчики, конкретного юзера.
Есть отдельная форма, где выбирается заказчик, а далее вся работа уже идет с этим заказчиком.
И вот какая мысль.
Если я буду в момент смены заказчика, менять клейм CustId.
И сохранять.
И потом уже везде будет новый клейм.
Это правильно, или опять не то?
Логически, алгоритмически меня это вполне устраивает.
Даже хорошо. Основной заказчик будет тот, который был последним после выхода.
...
Рейтинг: 0 / 0
09.08.2017, 19:46
    #39502910
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WebApi
asdorЕсть отдельная форма, где выбирается заказчик, а далее вся работа уже идет с этим заказчиком.

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


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

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


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

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

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

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

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

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

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

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

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

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


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


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