在ASP.NET MVC C#项目中:
我目前正在使用HttpContext.Items来存储应该在该请求中的任何地方使用的属性.
这就是我在控制器中的含义:
HttpContext.Items["IUser"] = new CustomClass(“parameter”);
这可以在视图中检索,因为我在视图web.config文件中覆盖了这样的默认WebViewPage:
<pages pageBaseType="Project.CustomWebViewPage">
在CustomWebViewPage中,我创建了一个属性,并在InitHelpers()方法中设置它,如下所示:
IUser = (CustomClass)HttpContext.Current.Items["IUser"];
但是,如果我想在我的Models / viewmodels中检索它,我将不得不将代码片段放在任何地方,因此我想到了直接在HttpContext中创建CustomClass(所以我至少不需要进行类型转换),但我无法找到如何覆盖或动态添加该对象.
解决方法
您可以创建一个扩展方法.像这样的东西:
public static class HttpContextExtensions { public static CustomClass GetUser(this HttpContextBase context) { return (CustomClass)context.Items["IUser"]; } }
然后你会这样称呼它:
var user = HttpContext.Current.GetUser();