Я пытался передавать данные между контроллерами весь день, но теперь я нахожусь в точке, где, я думаю, я не совсем понял основы.ASP.NET Core MVC: что происходит с запросом на RedirectToAction
На протяжении всей документации ядра ASP .NET они используют слово «запрос». Я был в предположении, что это HttpRequest, созданный клиентом WebServer.
Есть также разные вещи, которые должны быть привязаны к жизни запроса:
HttpContext
и егоHttpContext.Items
словарь.- Услуги, добавленные с помощью
AddScoped
через инъекцию зависимости. TempData
словарь? (Не уверен, что)
Но при попытке передать данные вокруг, я сделал замечание, что, когда я return RedirectToAction(...);
в HttpContext
изменения (HttpContext.GetHashCode()
имеет другое значение), TempData
изменения и услуги, добавленные с помощью AddScoped
также являются новые объекты.
Это означает, что на RedirectToAction
будет выполнен новый запрос, снова пройдя все этапы конвейера запроса. Мое предположение, однако, состояло в том, что RedirectToAction
только продолжает конвейер текущего запроса с другим действием контроллера.
Я также думал, что браузер или любой другой клиент сделал только один запрос и получил один ответ в течение всего этого процесса.
Так что же происходит при вызове RedirectToAction
в действии контроллера и возврате результата?
UPDATE: Использование TempData работает, но сначала необходимо настроить TempDataProvider. Например, добавьте services.AddSingleton<ITempDataProvider,SessionStateTempDataProvider>();
в Startup.cs
. Спасибо @RonC.
Я действительно пытался использовать TempData для этого, но это не сработало. Но я прочитал что-то о том, что содержимое будет удалено при первом доступе, может быть, проблема? Также я обратился к нему внутри реализации «IActionFilter», а не внутри самого действия контроллера. – FSMaxB
Я еще не работал с фильтрами действий, но это вполне может быть вашей проблемой, если оно удалено при первом доступе (что будет иметь смысл). Поэтому вам, вероятно, следует попробовать, обратившись к нему в следующем запросе в методе действий, не получив вначале его доступ к фильтру действий. Если вам действительно нужно получить доступ к нему в фильтре действий, вы можете повторно добавить его в временные данные или добавить его в коллекцию элементов запроса. Так что он доступен для метода действий. –
Нет, TempData не хранит мои данные, даже если я получаю доступ только один раз. – FSMaxB