Asp.net mvc 我可以从HttpContext访问ViewData吗?

Asp.net mvc 我可以从HttpContext访问ViewData吗?,asp.net-mvc,httpcontext,viewdata,controllercontext,Asp.net Mvc,Httpcontext,Viewdata,Controllercontext,我正在处理一个项目,该项目在其授权操作筛选器中设置变量,例如当前用户配置文件对象,并将其存储在ViewData中,以便通过以下操作方法进行访问 然后,action方法从存储库调用功能。我试图找到一种方法,在不修改存储库的方法签名的情况下,从存储库访问ViewData,我希望有一种方法可以通过HttpContext.Current功能从存储库调用它 有人能帮忙吗?需要明确的是,我唯一可以修改的代码是在repository方法中:( 我很确定答案是“不” 当您查看ASP.NET MVC源代码时,会在

我正在处理一个项目,该项目在其授权操作筛选器中设置变量,例如当前用户配置文件对象,并将其存储在
ViewData
中,以便通过以下操作方法进行访问

然后,action方法从存储库调用功能。我试图找到一种方法,在不修改存储库的方法签名的情况下,从存储库访问
ViewData
,我希望有一种方法可以通过
HttpContext.Current
功能从存储库调用它

有人能帮忙吗?需要明确的是,我唯一可以修改的代码是在repository方法中:(


我很确定答案是“不”

当您查看ASP.NET MVC源代码时,会在第一次使用时实例化ViewData字典。然后在调用
View()时
,一个新的
ViewResult
ControllerBase.ViewData
字典作为参数进行实例化。它看起来不像是应用于公共静态属性或类,比如可以从存储库内部访问的
HttpContext


我认为您最好的选择是使用为这种类型的通信而构建的。虽然可能没有修改存储库以接受额外数据那么理想。

所以这是在它到达回购之前的一个过滤器中?正确,我将发布一个代码示例。感谢您唯一可以做到这一点的方法是将ViewData注册到IoC或从回购协议内部解决一些问题…这听起来并不干净,但是如果你把视图数据放在一个过滤器中,然后把它放在某个静态的地方,你可以稍后抓住它,但是是的,很混乱
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 :(
    }
}