在 ASP.NET MVC 的单个请求生命周期中基于路由处理 cookie?

Handling cookies based on route in a single request lifecycle in ASP.NET MVC?

我正在编写一个路由,允许用户使用某些 JSON 对象的版本设置 cookie,应用程序将使用该对象来设置客户端配置。这是一个相当大的 JSON 对象,我们不想单独存储在 cookie 中。我们只想存储要查找的版本,并根据每个请求从云中的某个映射中设置,因为客户端的多个版本 运行 左右,我们希望在每个请求的基础上将它们分开。

目前,我知道问题是由于我对 ASP.NET MVC 的单个请求生命周期缺乏理解,我确信以下代码证明了这一点。我知道 Application_BeginRequest 操作可能在处理路由之前发生(如果我在这里错了请纠正我),但我不确定它应该发生在哪里以便在检索之前填充 cookie .我也不相信 Application_EndRequest 会因为相同但相反的问题而变得更好。

欢迎任何和所有有助于我理解生命周期的建议以及处理此类 cookie 值获取的适当操作!

// Working controller (cookie does get set, this is confirmed)
using System;
using System.Web;
using System.Web.Mvc;
using SMM.Web.Infrastructure.Filters;

namespace SMM.Web.Controllers
{
    [NoCache]
    public class SetCookieController : ApplicationController
    {
        private HttpCookie CreateVersionCookie(int versionId)
        {
            HttpCookie versionCookie = new HttpCookie("version_id");
            versionCookie.Value = versionId.ToString();
            return versionCookie;
        }

        public ActionResult SetCookie(int versionId)
        {
            Response.Cookies.Add(CreateVersionCookie(versionId));
            return Redirect("/");
        }
    }
}



// In Global.asax.cs (this does not work to get the cookie)
private void LoadSomeJsonFromACookie()
{
    HttpCookie someJsonThingCookie = HttpContext.Current.Request.Cookies["version_id"];
    string jsonVersion = (string)staticVersionCookie.Value;
    string json = FunctionToGetSomeJsonThingByVersion(jsonVersion); // This returns a stringified JSON object based on the jsonVersion supplied
    dynamic someJsonThing = JsonConvert.DeserializeObject<dynamic>(json);
    HttpContext.Current.Items["someJsonThing"] = someJsonThing;
}

protected void Application_BeginRequest(object sender, EventArgs e)
{
    RedirectToHttps();

    // some other redirects happen here

    LoadSomeJsonFromACookie();
}

Application_BeginRequest 是正确的地方。由于在代码中,您可以看到我正在将重定向发送回根 /,它会在需要 cookie 之前设置 cookie。