如何在 .ashx 文件中访问会话?

46

我想在.ashx文件中访问一些值(这些值已经在.aspx文件中设置)。我尝试使用查询字符串、会话等获取该值,但每次都失败了。有人能建议我如何在.ashx文件中访问会话值吗?


"HttpContext.Current.Session" 我尝试过,但总是出现异常。 - Kashif Hanif
4
你遇到了什么异常? - mrd
@mrd,.ashx文件中显示NullReference异常。我遵循了这篇文章,但仍然出现异常。 - Shyam Dixit
它对我来说很好用...你也可以尝试使用这个...System.Web.SessionState.IReadOnlySessionState或System.Web.SessionState.IRequiresSessionState....?? - Kashif Hanif
@KashifR 我已经包含了这个。实际上它在变量中显示为空。我不知道为什么。在 .aspx 文件中变量存储的值,但在 .ashx 文件中获取它时没有显示出来。 - Shyam Dixit
你能在这里发布你的代码吗?这样我就可以检查了。请确保头文件像这样:public class FileUpload:IHttpHandler,System.Web.SessionState.IRequiresSessionState然后像这样获取会话:spaceused = context.Session["SpaceUsed"] + ""; - Kashif Hanif
3个回答

79

4
我爱你。由于某些原因,这个问题只在我的Visual Studio 2013(VS2013)中出现。可能是因为它使用的.NET版本或IIS Express版本(IIS 7?)不同。感谢您的帮助! - Suamere
虽然这个答案很有帮助,但被采纳的答案在示例代码的第一行也包括了这个:public class ImageHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState - Scott R. Frost

58
在aspx文件中:
Session.Add("filename", "Test.txt");


在aspx文件中设置了session值之后,使用以下代码在ashx文件中获取该值:

在ashx文件中:

public class ImageHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState
{
    public void ProcessRequest(HttpContext context)
    {
      string Name = "";
      if (context.Session["filename"] != null)
         Name = context.Session["filename"].ToString();
    }
}

如何设置会话变量? context.Session["filename"] = "somevalue";这样正确吗? - efirat
1
如果你在aspx页面中设置会话变量,那么只需使用Session("filename") = "somevalue"。如果你在处理程序中进行设置,则使用context.Session["filename"] = "somevalue"。 - mrd
16
答案的关键部分是需要修改处理程序,使其继承自IRequiresSessionState,以便可以访问会话(Session)。注意要保持原意,简化语言。 - James in Indy

-3

试试这个,

HttpContext.Current.Session

7
这仍然需要上面答案中的信息。 - Dan Hastings

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接