Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ';会话状态在此上下文中不可用';当请求多个文件时_C#_Asp.net_Session_Httpapplication - Fatal编程技术网

C# ';会话状态在此上下文中不可用';当请求多个文件时

C# ';会话状态在此上下文中不可用';当请求多个文件时,c#,asp.net,session,httpapplication,C#,Asp.net,Session,Httpapplication,at的代码示例正是我在两个子域之间共享会话所需要的。唯一的问题是它在现实生活中不起作用。当请求的ony文件是页面本身时,它可以正常工作,但当其他文件是请求的一部分时,例如如果我向页面添加样式表或javascript文件,则抛出错误“会话状态在此上下文中不可用”。代码在下面的“if(context.Session!=null&&”行中生成此错误: void context_PostRequestHandlerExecute(object sender, EventArgs e) { Htt

at的代码示例正是我在两个子域之间共享会话所需要的。唯一的问题是它在现实生活中不起作用。当请求的ony文件是页面本身时,它可以正常工作,但当其他文件是请求的一部分时,例如如果我向页面添加样式表或javascript文件,则抛出错误“会话状态在此上下文中不可用”。代码在下面的“if(context.Session!=null&&”行中生成此错误:

void context_PostRequestHandlerExecute(object sender, EventArgs e)
{
    HttpApplication context = (HttpApplication)sender;
    HttpCookie cookie = context.Response.Cookies["ASP.NET_SessionId"];

    if (context.Session != null &&
        !string.IsNullOrEmpty(context.Session.SessionID))
    {
        cookie.Value = context.Session.SessionID;
        if (rootDomain != "localhost")
        {
            cookie.Domain = rootDomain;
        }
        cookie.Path = "/";
    }
}

您可以尝试一个try-Catch块,然后可以捕获空值

    private HttpSessionState GetSession(HttpApplication context)
    {
        try
        {
            //On Abadon or Logout this returns "Session state is not available in this context. "
            return context.Session;
        }
        catch (HttpException)
        {
            return null;
        }
    }

您可以尝试一个try-Catch块,然后可以捕获空值

    private HttpSessionState GetSession(HttpApplication context)
    {
        try
        {
            //On Abadon or Logout this returns "Session state is not available in this context. "
            return context.Session;
        }
        catch (HttpException)
        {
            return null;
        }
    }

你应该给它一个描述问题的标题,而不是询问人们是否熟悉该示例。好的,编辑了标题,希望能吸引到一些熟悉的人。我对它做了更多的调整。作为一个快速测试,将你的if语句包装成以下内容:if(context.Request.Path.ToUpper().IndexOf(“.ASPX”)>0{查看从该代码中排除任何非aspx文件时会发生什么情况(即,仅当当前请求的是aspx页面而不是HTML页面或CSS文件等时才进行处理)。如果这是问题的话,我很惊讶它们被推送通过处理程序。如果我将其包装在处理程序中,它确实会起作用。那些文件被推送通过处理程序,我也有点惊讶。你应该给它一个描述问题的标题,而不是询问人们是否熟悉该示例。好的,编辑标题,希望如此这吸引了一些熟悉的人。我对它做了更多的调整。作为一个快速测试,将您的if语句包装为以下内容:if(context.Request.Path.ToUpper().IndexOf(“.ASPX”)>0{},以查看如果从代码中排除任何非ASPX文件会发生什么(即,仅当当前请求是针对aspx页面而不是HTML页面或CSS文件等时才进行处理)。如果这是问题的话,我很惊讶它们被推送通过处理程序。如果我将其包装在其中,它确实有效。我也有点惊讶那些文件被推送通过处理程序。