Могу ли я получить доступ к ViewData из HttpContext?

Я работаю с проектом, который устанавливает переменные, такие как объект текущего профиля пользователя, в своем фильтре действий авторизации, сохраняя их в ViewData для доступа следующим методом действия.

Затем метод действия вызывает функциональность из хранилища. Я пытаюсь найти способ получить доступ к ViewData из хранилища БЕЗ изменения подписи метода хранилища, и я надеюсь, что есть способ, которым я могу отследить его через HttpContext.Current функциональность, которую я могу вызвать из хранилища.

Может кто-нибудь помочь с этим? Просто чтобы быть понятным, единственный код, который я могу изменить, находится внутри метода репозитория:(

public class MyController : Controller {
    [MyAuthorize]                   // ViewData items are set here
    public void MyAction(int id)
    {
        new MyRepository().DoSomething(id); // Need to access ViewData items within this repository method and am unable to alter the method signature :(
    }
}

1 ответ

Решение

Я уверен, что ответ "нет".

Когда вы просматриваете исходный код ASP.NET MVC, ControllerBase создает экземпляр словаря ViewData при первом использовании. Затем, когда вы звоните View() новый ViewResult создается с ControllerBase.ViewData словарь в качестве параметра. Это не похоже на применение к общему статическому свойству или классу HttpContext который вы могли бы получить доступ из своего хранилища.

Я думаю, что ваш лучший выбор будет использовать HttpContext.Items который построен для этого типа общения. Хотя, вероятно, не так идеален, как просто изменение хранилища для принятия дополнительных данных.

Другие вопросы по тегам