Почему вы отделяете веб-API и проекты MVC? Есть ли конкретная причина, по которой вы это делаете?
Если у вас есть два проекта, один из которых выставляет веб-API и один из них демонстрирует пользовательский интерфейс с использованием MVC, у вас будет два приложения , работающих на веб-сервере, с отдельными контекстами. Подумайте об этом как о создании приложения MVC UI для стороннего веб-сайта, предоставляющего веб-службы API.
Это означает, что внешнее приложение (MVC) должно аутентифицироваться во внутреннем приложении (веб-API) от имени пользователя и как-то хранить токен авторизации для последующего вызова API. Не знаете, как вы это достигли, но это можно сделать, используя переменную сеанса (не очень хорошая идея) или зашифрованный файл cookie авторизации.
Что внешнее приложение знает о зарегистрированном пользователе, это только то, что пользователь отправляет для аутентификации (например, имя пользователя или адрес электронной почты), и ответ, возвращаемый из проверки подлинности веб-API (который содержит токен и дату истечения срока действия).Если вам нужно больше информации во внешнем приложении (MVC), вам придется либо:
Настройка аутентификации Web API, чтобы включить дополнительную информацию - см AspNet Identity 2: Customize OAuth endpoint response
Добавить еще один сервис в ваше веб-приложение (Web API), которое возвращает любую информацию, которая может потребоваться для входа вошел в систему, и вызывать ее сразу же после аутентификации в приложении MVC.
И вам придется управлять/хранить возвращаемую информацию во внешнем приложении (MVC) самостоятельно.
Возможно, вам также потребуется настроить отдельное использование идентификатора ASP.NET для внешнего приложения (MVC) и использовать внутреннее приложение в качестве поставщика OAuth; но я не думаю, что это то, что вам нужно.
В любом случае, я думаю, вам нужно переоценить архитектуру и подумать о разделении проектов Web API и MVC. Если вы развертываете оба приложения в одном и том же месте, этот подход не только добавит большое количество неприятностей (например, управление авторизацией, о которой вы просите), но и это означает, что гораздо больше (ненужных) работы для сервера и более низкой производительности. И я не вижу никакой пользы, которую вы могли бы получить от такого разделения.
Это не обязательно дополнительные накладные расходы. Я регулярно структурирую свои решения, чтобы моя модель, веб-API и клиентские приложения представляли собой три различных проекта. Проекты Web API и модели объединяются в соответствующие библиотеки DLL, которые затем ссылаются и настраиваются клиентским приложением; например, через '' в 'web.config' и вызов' GlobalConfiguration.Configure() 'в' global.asax.cs'. Этот подход не требует накладных расходов, например, при использовании отдельных приложений в IIS. Независимо от того, что вопрос OP не зависит от их архитектуры. –
Вы правы, я также структурирую свой код таким же образом, имея MVC и Web API, размещенные в одном рабочем процессе. Это не приведет к разделению определения идентификации. Что я получил от вопроса, является то, что приложение MVC использует методы Web API удаленно, и у них разные конвейеры запросов. – Iravanchi