我正在使用.net 2010,c#构建一个Web应用程序。我想在一个解决方案中创建几个项目。
asp.net Web应用程序
用于保存正常业务逻辑的类库。
用于保存业务逻辑以调用第三方API的类库。
当我呼叫第三方API时,我需要先登录,第三方API会返回一个会话供我沟通,直到我退出。我想要的是在asp.net Web应用程序中保持相同的登录会话。这意味着当用户从Web表单登录时,程序将登录第三方API并为该用户获取会话;另一个用户从Web表单登录,该程序将登录第三方API并为该用户抓取另一个会话。每当用户对业务逻辑层进行一些调用时,业务逻辑层中的方法应该能够知道它正在使用的第三方API中的哪个会话。
此外,我可能希望稍后为WPF应用程序或控制台应用程序重用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应用程序中,只需将一个实例作为类成员保留,也许作为静态成员。