51207


以下のようなコードで、Homeアクションにリクエストすると、Indexビューでは"fuga"が表示される想定ですが、実際はなにも表示されません。

[code]

    // Index.cshtml
    <h2>@ViewData["Message"]</h2>
    
    // Action
    public IActionResult Index()
    {
        var str = "";
        str = HttpContext.Session.GetString("msg");
        ViewData["Message"] = str;
    
        return View();
    }
    
    public IActionResult Home()
    {
         HttpContext.Session.SetString("msg", "fuga");
         return Redirect("/Index");
    }
    
[/code]

Indexアクションを以下のようにすると、Indexビューで"fuga"が表示されるため、Sessionに値を格納することはできているという認識です。

[code]

    public IActionResult Index()
    {
        var str = "";
        HttpContext.Session.SetString("msg", "fuga");
        str = HttpContext.Session.GetString("msg");
        ViewData["Message"] = str;
    
        return View();
    }
    
[/code]

以上の状況から、Redirectするタイミングで、Sessionから保持していた値が消えているのではないかと推測していますが、具体的な原因と解決策が分かりません。  
ご教授願えればと思います。

追記：  
リダイレクトだけではなく、1回のリクエストを超えた値の保持ができていない状態でした。


CC BY-SA 4.0
2018-12-14T01:36:53.933
51193
2018-12-14T08:00:05.277
2018-12-14T03:52:20.910
27017
27017
question
asp.net-core
ASP.NET Core MVCでRedirectするとSessionに保持した値が消える


解決しました。  
StartUp.csにおけるミドルウェアの書き順が原因でした。  
app.UseCookiePolicy()をUseMvc()より前に書くと例外は起きないですが、クライアント側に提供されるはずのSessionIDを含むCookieが正常に受け渡されないため、セッションを維持することができないようです。

[code]

    // … 略
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }
    
            app.UseHttpsRedirection();
            app.UseStaticFiles();
    
            // ここに書くのはNG
            // app.UseCookiePolicy();
    
            app.UseSession();
    
            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
    
            // UseMvc()より後に書く
            app.UseCookiePolicy();
        }
    
[/code]


CC BY-SA 4.0
2018-12-14T08:00:05.277
51207
2018-12-14T08:00:05.277
27017
51193
answer