我最近遇到了一个奇怪的问题,asp.net会话实际上发生在下面的示例代码中。
创建会话的代码(Login.aspx.cs)
public partial class Login : System.Web.UI.Page
{
protected async void btnLogin_Click(object sender, EventArgs e)
{
await request_login();
if (canLogin == true)
{
Response.Redirect("Dashboard.aspx");
}
}
private async Task request_login()
{
// call web service with httpClient
Session["key"] = "session object to be stored";
}
}
调用会话的代码(Dashboard.aspx.cs)
public partial class Dashboard : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
String sessionDetails = Session["key"] as String;
}
}
当我运行这段代码时,我从Session["Key"]
得到一个空字符串。我设法通过在home.aspx文件中添加一个虚拟会话来解决这个问题(这实际上是网站的默认页面)。
Home.aspx.cs
public partial class Home : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//wierd fix that allows session access
Session["home"] = "fromHome";
}
}
添加Session["home"]
后,我的Session["key"]
能够完美地运作。为什么会这样?不能Session["key"]
能够完美地工作而无需在home.aspx.cs中添加Session["home"]
吗?
答案 0 :(得分:1)
试试这个:
public partial class Login : System.Web.UI.Page
{
protected async void btnLogin_Click(object sender, EventArgs e)
{
await request_login();
if (canLogin == true)
{
Response.Redirect("Dashboard.aspx",false);
}
}
private async Task request_login()
{
// call web service with httpClient
Session["key"] = "session object to be stored";
}
}
所以这不会中止线程。
如果您想知道发生这种情况的确切原因,请访问: http://weblogs.asp.net/bleroy/Don_2700_t-redirect-after-setting-a-Session-variable-_2800_or-do-it-right_2900_