使用Session将数据从.aspx文件传递到.ashx文件

时间:2014-01-03 10:39:42

标签: c# asp.net .net session

实际上我正在尝试将数据从.aspx发送到.ashx文件。我在.aspx中使用Session并尝试在.ashx中获取会话值,但它显示异常:: 对象引用未设置为对象的实例。

这是我的代码: -

.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 if for null但是我已经检入.aspx文件它显示的值但在.ashx文件中显示为什么? (对于特殊情况,我们可以使用/写条件但我已经检查过字符串会话有值。

  3. 我错过了什么吗?感谢

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

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

3 个答案:

答案 0 :(得分:3)

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

让您使用相同的按键。 (即MIdMailId,但不是两者都有。)

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

答案 1 :(得分:1)

这段代码很适合我

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调用访问处理程序

答案 2 :(得分:1)

现在它正在运作。我做了这些改变: -

而不是

[WebMethod(enableSession:true)] 

我把

[WebMethod(EnableSession = true)]

但两者都是正确的方法。

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