Подтвердить что ты не робот

Получение и сохранение состояния по запросам

Я пишу свое первое приложение веб-API ASP.NET. Я знаком с другими структурами веб-приложений (в основном Symfony, но также Django и, в меньшей степени, RoR).

Я немного борюсь, чтобы понять последовательность событий, которые происходят после того, как запрос отправлен от браузера/переднего клиента к веб-серверу.

Я пишу многозадачное приложение, которое использует бэкэнд БД. Я использую ADO и raw SQL для доступа к базе данных, мне также нужно хранить много информации для каждого пользователя, так что в основном я создаю (или извлекаю из кеша) предварительно загруженный контекст для пользователя.

вот какой-то псевдокод, который иллюстрирует, чего я пытаюсь достичь, в ASP.NET.

namespace myApp.Controllers
{
    public class FoobarController : ApiController
    {
        public Response doLogin(request)
        {
             var ctx = myApplicationContext.getInstance();
             var user = ctx.getUser();     

             if (!user.isLoggedOn())
             {
                 username = request.getParameter('username');
                 password= request.getParameter('password');

                 dbManager = ctx.getDbInstance();

                 resp = dbManager.internalLogin(username, password);

                 // Load permissions etc for current user, from db
                 // Store user info in cache ..
             }
        }       

        public Response ActionOne(request)
        {
             ctx = myApplicationContext.getInstance();
             user = ctx.getUser();

             if (user.hasPermission('xxx'))
             {

             }
        }
    }
}

Мой вопрос: как реализовать такую ​​функциональность:

А именно:

  • Создайте контекст приложения, в котором я могу заполнить контекстно-зависимую информацию, такую ​​как соединение с базой данных, конфигурацию почтовой программы, объекты-объекты, информацию о разных состояниях и т.д.

  • Доступ к пользовательскому объекту (который я могу добавить учетные данные пользователя, разрешения и т.д.)

  • Есть ли доступ к переменным сеанса и т.д.

Примечания

  • Я буду развертывать веб-приложение в Linux, и я буду использовать Apache в качестве веб-сервера.
  • Для целей этого проекта я не хочу использовать какие-либо технологии Microsoft, такие как Azure, Windows Authentication и т.д. (кроме С# и ASP.Net).
  • Я хочу использовать необработанное соединение с базой данных, не используя Entity Manager (старый порт приложения)
4b9b3361

Ответ 1

Я немного борюсь, чтобы понять последовательность событий, которые происходят после того, как запрос отправлен от браузера/переднего клиента к веб-серверу.

Для этого я бы сказал этот PDF-плакат дает наилучшее графическое представление обработки запросов в ASP.NET WebAPI.

Мой вопрос: как реализовать такую ​​функциональность:

А именно:

  • Создайте контекст приложения, в котором я могу заполнить контекст такая как соединение с базой данных, почтовая программа конфигурации, объектных заводов, информации о разных состояниях и т.д.

  • Доступ к пользовательскому объекту (который я могу добавить учетные данные пользователя, разрешения и т.д.)

  • Есть ли доступ к переменным сеанса и т.д.

Для этого я бы сказал, что WebAPIs предназначены для безгражданства, поэтому наилучшим подходом является создание постоянного сеанса (Say in database) и использование идентификатора для сеанса (например, сеансового ключа или токена) для каждого запроса для идентификации пользователя и получить его переменные сеанса/контекстную информацию.

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

Каждый запрос в WebAPI сначала обрабатывается обработчиками, а затем перед выполнением запрошенного действия применяются фильтры. В вашем примере фильтры проверки подлинности будут содержать функцию DoLogin, а логика user.hasPermission будет находиться в фильтрах авторизации, и только логика действий будет находиться в действии (функции) в контроллере.

введите описание изображения здесь