我正在将一个ASPX文件作为字符串读取,并将返回的HTML作为电子邮件消息的源。以下是代码:
由于页面请求不是直接由浏览器发起的,而是由SimpleWorkerRequest发起的,因此没有发布的SessionId,因此HTMLEmail.aspx无法访问任何会话变量。至少我认为这是问题所在。
我已经阅读了关于会话变量的概述:http://msdn.microsoft.com/en-us/library/ms178581.aspx 我想知道是否需要实现自定义会话标识符。我可以在GetEmailHTML方法中获取当前SessionId,并将其作为查询字符串参数传递到HTMLEmail.aspx。如果我在HTMLEmail.aspx中有SessionId,我可以使用自定义会话标识符来访问会话变量。
这个修复听起来很混乱。它还删除了ASP自动应用于SessionId的加密层。
有更好的想法吗?
public string GetEmailHTML(int itemId)
{
string pageUrl = "HTMLEmail.aspx";
StringWriter stringWriter = new StringWriter();
HttpRuntime.ProcessRequest(new SimpleWorkerRequest(pageUrl, "ItemId=" + itemId.ToString(), stringWriter));
stringWriter.Flush();
stringWriter.Close();
return stringWriter.ToString();
}
HTMLEmail.aspx使用ItemId查询字符串变量从数据库加载数据并填充页面结果。我需要保护HTMLEmail.aspx页面,以便操纵的查询字符串不会让任何人查看结果。
我这样存储当前用户:
public User AuthenticatedUser
{
get { return Session["User"] as User; }
set { Session["User"] = value; }
}
由于页面请求不是直接由浏览器发起的,而是由SimpleWorkerRequest发起的,因此没有发布的SessionId,因此HTMLEmail.aspx无法访问任何会话变量。至少我认为这是问题所在。
我已经阅读了关于会话变量的概述:http://msdn.microsoft.com/en-us/library/ms178581.aspx 我想知道是否需要实现自定义会话标识符。我可以在GetEmailHTML方法中获取当前SessionId,并将其作为查询字符串参数传递到HTMLEmail.aspx。如果我在HTMLEmail.aspx中有SessionId,我可以使用自定义会话标识符来访问会话变量。
这个修复听起来很混乱。它还删除了ASP自动应用于SessionId的加密层。
有更好的想法吗?