【问题标题】:Passing data from .aspx file to .ashx file using Session使用 Session 将数据从 .aspx 文件传递​​到 .ashx 文件
【发布时间】:2026-01-12 18:35:10
【问题描述】:

实际上我正在尝试将数据从 .aspx 发送到 .ashx 文件。我在 .aspx 中使用 Session 并试图在 .ashx 中获取 session 的值,但它显示异常:: Object reference not set to an instance of an object.

这是我的代码:-

.aspx 代码

[WebMethod(enableSession:true)]
public static string SetId(string Id)
{
    HttpContext.Current.Session["MId"] = Id.ToString(); Console.Write(" ");
    string session = HttpContext.Current.Session["MId"].ToString(); // Here I am getting value

    //string session = HttpContext.Current.Session["MId"].ToString();
    //BatchReadEmails.EmailProperties session = new BatchReadEmails.EmailProperties();
    //session.MailId = Id.ToString();

    return "Ok";
}

我在字符串会话中获得了价值。
.ashx 代码:-

 public class ChangeLogHandler : IHttpHandler, System.Web.SessionState.IRequiresSessionState 
            {

                public void ProcessRequest(HttpContext context)
            {
                HttpRequest request = context.Request;
                HttpResponse response = context.Response;
                  string session = "";

                if (context.Session["MId"] != null)
                    session = context.Session["MId"].ToString();
                else
                    session = "Hello India";


            }
            }

这里显示 session = "Hello India"

我的问题:-

  1. 有没有办法将数据从 .aspx 发送到 .ashx 文件?

  2. 我检查了这么多链接都在使用 if for null 但我已经在 .aspx 文件中检查它在那里显示值但在 .ashx 文件中显示 null 为什么? (对于特殊情况,我们可以使用/编写 if 条件,但我已经检查过字符串会话是否有价值。

我错过了什么吗?谢谢

这些是我已经使用的链接:-

How to access Session in .ashx file?
Accessing context session variables in c#

【问题讨论】:

  • 我注意到您在页面中使用 web 方法来设置会话值。如果您将会话值设置为主 Page_Load 中的某个值,它会起作用吗?
  • 是的,它来了,如果我在Page_Load中定义
  • 你确定 webmethod 是在调用 ashx 之前执行的吗?
  • 是的,它被执行了。并且正在使用“会话”变量来检查它是否包含某些内容。
  • 您能否更新 ashx 代码 - 显示的代码无法编译(因为代码只是在类主体中)。请参阅我对 SSCCE 的评论 - 如果您需要建设性的帮助并且人们不会感到沮丧,这很重要。

标签: c# asp.net .net session


【解决方案1】:

在 aspx 中,您要添加 Session["MId"]。在 ashx 中,您正在阅读 Session["MailId"]

使您使用的密钥相同。 (即MIdMailId,但不能同时使用两者)。

建议你定义一个常量来定义这个值,因为它是共享的,那么你可以避免这样的问题。

【讨论】:

  • 对不起,但两者都是一样的,我尝试了很多方法,所以最后它作为 MailId。但那里是一样的
  • 那么请确保您显示为有问题的代码是您实际使用的有问题的代码,而不是其他有其他问题的代码。请参阅 SSCCE 了解在这些网站上发布的最佳内容。
【解决方案2】:

这段代码很适合我

protected void Button1_Click(object sender, EventArgs e)
    {
        Session["MailId"] = "somemail@address.com";
        Response.Redirect("Handler.ashx");
    }

/// ashx 中的代码

public class Handler : IHttpHandler, IRequiresSessionState
{

    public void ProcessRequest (HttpContext context)
    {

        string sessionValue = context.Session["MailId"].ToString();
        context.Response.Write(sessionValue);
    }

    public bool IsReusable {
        get {
            return false;
        }
    }

}

我想知道你是否通过 ajax 调用访问处理程序

【讨论】:

  • 他已经在使用 IRequiresSessionState 来完成这项工作(并允许对会话进行读写访问)。
【解决方案3】:

现在它可以工作了。我做了这些更改:-

而不是

[WebMethod(enableSession:true)] 

我放了

[WebMethod(EnableSession = true)]

但两者都是正确的方法。

我包括 async: false 在我的 ajax 调用中。 (我认为在设置会话之前它试图阅读它)

【讨论】:

    最近更新 更多