在Post中找不到基于nancyfx cookie的会话值,反之亦然

时间:2014-06-06 09:24:44

标签: session nancy

我正在尝试使用Nancyfx自托管。问题是当我在Session["key"] = value中设置Get["path"]时,我在Post["path"]中调用它,我变空,反之亦然。以下是我的代码

public class Bootstrapper : DefaultNancyBootstrapper
{
    protected override void ApplicationStartup(Nancy.TinyIoc.TinyIoCContainer container, Nancy.Bootstrapper.IPipelines pipelines)
    {
            CookieBasedSessions.Enable(pipelines);
    }
}

public class TestModule : NancyModule
{
    public TestModule()
    {
        Get["/"] = _ =>
        {
            Session["App1"] = "Ola";

            return Session["App1"] + " " + "Hello World";//"Ola Hello World"
        };

        Get["/about"] = _ =>
        {
            return Session["App1"];//"Ola Hello World"
        };

        Post["/create"] = _ =>
        {
            return Session["App1"];//emtpty
        };

        Post["/add"] = _ =>
        {
            return Session["App1"];//empty
        };
    }
}

class Program
{
    static void Main(string[] args)
    {
        var cfg = new HostConfiguration();
        cfg.UrlReservations.CreateAutomatically = true;
        var host = new NancyHost(new Bootstrapper(), cfg, new Uri("http://localhost:5050"));
        host.Start();

        Console.ReadKey();

        WebRequest wr1 = HttpWebRequest.Create("http://localhost:5050/create");

        wr1.Method = "POST";

        wr1.GetRequestStream();

        StreamReader sr1 = new StreamReader(wr1.GetResponse().GetResponseStream());

        Console.WriteLine(sr1.ReadToEnd());

        Console.ReadKey();

        WebRequest wr2 = HttpWebRequest.Create("http://localhost:5050/add");

        wr2.Method = "POST";

        wr2.GetRequestStream();

        StreamReader sr2 = new StreamReader(wr2.GetResponse().GetResponseStream());

        Console.WriteLine(sr2.ReadToEnd());

        Console.ReadKey();

        host.Stop();
    }
}

有了这个问题,现在我无法保存登录状态或一些必要的信息。你们有解决方案吗?

1 个答案:

答案 0 :(得分:0)

正如@phill所指出的那样,您发布的代码按预期工作。

实际上,您的引导程序和模块可以正常工作,并且可以从所有处理程序访问该会话。

问题在于,当您创建新的HttpWebRequests时,不保留先前调用的cookie。要将Cookie从一个此类请求转移到下一个请求,请执行this answer所说的内容。