我所有的控制器在类的顶部都有这个代码。
public class TestController : Controller
{
//
// GET: /Reports/
string userName;
string uid;
string accountType;
int companyCode;
protected override void Initialize(RequestContext requestContext)
{
base.Initialize(requestContext);
string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Request.Cookies[cookieName];
if (authCookie != null)
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string userData = authTicket.UserData;
JavaScriptSerializer serializer = new JavaScriptSerializer();
var userInfo = serializer.Deserialize<MemberModel>(userData);
userName = userInfo.firstName + " " + userInfo.lastName;
uid = userInfo.uid;
accountType = userInfo.accountType;
companyCode = userInfo.companyCode;
}
}
因为,每个控制器都需要有 cookie 中的用户信息。
我认为这不是在每个控制器中编写该代码的正确方法。
此外,即使我不能在我的模型中使用该方法。
base.Initialize(requestContext); <= 'object' does not contain a definition for 'Initialize'
所以,我想知道如何将该方法设置为 GLOBAL 变量以在任何控制器和模型中使用。
有知道的请指教~
[编辑]
谢谢!
[编辑]
我在 HomeController 中定义如上代码并尝试在 testController 中调用 userName。但它是空的。(错误现在消失了)
在测试控制器中,
[HttpGet]
public void test()
{
Response.Write(MemberModelProvider.UserName);
Response.Write(System.Web.HttpContext.Current.Items["UserName"]);
}
它什么也没打印...
我究竟做错了什么?
我非常感谢您的帮助!