Как я могу построить свою архитектуру класса для моего веб-приложения asp.net - PullRequest
0 голосов
/ 17 сентября 2010

Я создаю веб-приложение, используя .net 2010, c #. Я хочу создать несколько проектов в одном решении.

  1. Веб-приложение asp.net

  2. Библиотека классов для хранения нормальной бизнес-логики.

  3. Библиотека классов для хранения бизнес-логики для вызова стороннего API.

Когда я вызываю сторонний API, мне нужно сначала войти в систему, и сторонний API вернет мне сеанс связи, пока я не выйду из системы. То, что я хочу, это остаться в том же сеансе входа в систему в веб-приложении asp.net. Это означает, что когда пользователь вошел в систему из веб-формы, программа войдет в систему стороннего API и получит сеанс для этого пользователя; другой пользователь вошел в систему через веб-форму, программа войдет в систему стороннего API и получит еще один сеанс для этого пользователя. всякий раз, когда пользователь выполняет некоторые вызовы на уровне бизнес-логики, метод на уровне бизнес-логики должен иметь возможность узнать, какой сеанс от стороннего API он использует.

Кроме того, я мог бы захотеть позже использовать библиотеку классов 2 для приложения WPF или консольного приложения.

Как я могу это реализовать?

Ответы [ 2 ]

1 голос
/ 18 сентября 2010

Просто сохраните информацию о сеансе стороннего API, полученную из имени входа, в объекте Session вашего приложения ASP.NET и повторно используйте его для последующих запросов к API. То есть предполагая, что третья сторона предоставляет файл cookie сеанса с именем .ASPXAUTH, вы можете сделать следующее:

        api.CookieContainer = new System.Net.CookieContainer();
        api.Login(user_name, password);
        Session["APIAuthenticationCookie"] = api.CookieContainer.GetCookies(new Uri(api.Url))[".ASPXAUTH"];


    //later request: reuse session cookie before using API
    api.CookieContainer = new CookieContainer(); 
    Cookie sessionCookie = (Cookie)Session["APIAuthenticationCookie"];
    if (sessionCookie != null)
        api.CookieContainer.Add(sessionCookie);
    api.RandomRequest();
0 голосов
/ 18 сентября 2010

Если вы можете повторно использовать библиотеки классов и если одна из этих библиотек предназначена для абстрагирования доступа к стороннему API, то в этой библиотеке должен быть класс, который является точкой входа для API. Он может включать все методы этого API или явно представлять «сеанс» с этим API.

Этот класс должен вызывать метод «login» API по мере необходимости и должен содержать копию ключа сеанса, который возвращает API.

В вашем приложении ASP.NET вы должны хранить экземпляр этого класса в состоянии сеанса ASP.NET. Таким образом, будет один на пользователя. В консольном или WPF-приложении просто сохраняйте один экземпляр как член класса, возможно, как статический член.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...