Обработка файлов cookie на основе маршрута в одном жизненном цикле запроса в ASP.NET MVC? - PullRequest
0 голосов
/ 19 октября 2019

Я пишу маршрут, который позволит пользователю установить 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();
}

1 Ответ

0 голосов
/ 27 октября 2019

Application_BeginRequest это правильное место. Поскольку в коде вы можете видеть, что я запускаю перенаправление обратно в root /, он установит cookie, прежде чем он когда-либо будет нуждаться в cookie.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...