Я пишу маршрут, который позволит пользователю установить cookie с версией некоторого объекта JSON, который приложение будет использовать для установки конфигураций на стороне клиента. Это довольно большой объект 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();
}