【发布时间】:2014-07-22 13:50:36
【问题描述】:
我有一个 ASP.Net API 实现,在连续调用中存储和访问数据/变量的位置,我使用如下所示的会话状态对象,它可以在多个调用中成功访问,以通过一个单独的调用浏览器:
// Access the current session object
var blSession = HttpContext.Current.Session;
// create the BL object using the user id
BL accessBL = new BL(userID);
// Store the Bl object in the session object dictionary
blSession["UserBL"] = accessBL;
我必须在 Global.asax 中启用以下设置,才能访问 Session 对象:
protected void Application_PostAuthorizeRequest()
{
// Enable session state in the web api post authorization
HttpContext.Current.SetSessionStateBehavior(SessionStateBehavior.Required);
}
当上面显示的 WebAPI 必须通过另一个 ASP.Net MVC 客户端访问时出现问题,该客户端单独托管在不同的机器上,当时相同的连续调用不会保持如上所示的状态,因此会导致一个例外,因为连续调用依赖于会话数据来继续。
当我在使用 Fiddler 调试器时看到类似的问题时,我也看到了类似的问题,因为它作为 Web 代理托管,因此通过它的连续调用也会失败,因为它不维护状态。据我了解,问题是由于跨域设置 Cookie,由于安全原因,这似乎不适用于跨域
我知道一种解决方法是使用应用程序范围的变量,如 Cache,但如果您有办法让 SessionState 工作,请提出建议。如果您需要更多详细信息,请告诉我。
【问题讨论】:
标签: asp.net asp.net-mvc asp.net-web-api