如何为我的asp.net Web应用程序构建我的类架构

时间:2010-09-17 18:25:34

标签: c# asp.net architecture

我正在使用.net 2010,c#构建一个Web应用程序。我想在一个解决方案中创建几个项目。

  1. asp.net Web应用程序

  2. 用于保存正常业务逻辑的类库。

  3. 用于保存业务逻辑以调用第三方API的类库。

  4. 当我呼叫第三方API时,我需要先登录,第三方API会返回一个会话供我沟通,直到我退出。我想要的是在asp.net Web应用程序中保持相同的登录会话。这意味着当用户从Web表单登录时,程序将登录第三方API并为该用户获取会话;另一个用户从Web表单登录,该程序将登录第三方API并为该用户抓取另一个会话。每当用户对业务逻辑层进行一些调用时,业务逻辑层中的方法应该能够知道它正在使用的第三方API中的哪个会话。

    此外,我可能希望稍后为WPF应用程序或控制台应用程序重用2类库。

    我该如何实施?

2 个答案:

答案 0 :(得分:1)

只需在ASP.NET应用程序的Session对象中保存从登录中获取的第三方API的会话信息,然后将其重新用于后续API请求。 即假设第三方提供了名为.ASPXAUTH的会话cookie,您可以执行以下操作:

        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();

答案 1 :(得分:0)

如果您可以重用类库,并且其中一个库旨在抽象对第三方API的访问,那么您应该在该库中有一个类,它是API的入口点。它可能包含该API的所有方法,或者它可能明确表示与该API的“会话”。

此类应根据需要调用API的“login”方法,并应保存API返回的会话密钥的副本。

在ASP.NET应用程序中,您应该在ASP.NET会话状态中保留此类的实例。这样,每个用户将有一个。在控制台或WPF应用程序中,只需将一个实例作为类成员保留,也许作为静态成员。