我想使用Cookie来识别用户。我已经学会了如何做到这一点,但是我不能在普通方法中使用我的代码并从ActionResult方法中访问它。我曾想过创建一个获取名称的ActionResult,然后返回将名称作为参数传递的真实ActionResult。但这看起来很乱,特别是考虑到一些ActionResult方法已经有参数了!
this question的第一个答案看起来很有希望。它建议为HttpContext创建一个扩展方法,这是有道理的。这是我的实施:
public static class ExtensionHelper
{
public static string UserIdentity(this HttpContext context)
{
string userName;
HttpCookie cookie = context.Request.Cookies["userNameCookie"];
if (cookie == null)
{
userName = CookiesCounter.ReturnNewestID();
cookie = new HttpCookie("userNameCookie", userName);
cookie.Expires = DateTime.Now.AddDays(31);
context.Response.Cookies.Add(cookie);
}
else
{
userName = cookie.Value;
}
return userName;
}
}
但是当我打电话时
HttpContext.UserIdentity();
在我的控制器中,我得到的抱怨是:“HttpContextBase不包含UserIdentity的定义,最好的扩展方法重载需要HttpContext类型的接收器”。
从我天真的角度来看(新的扩展方法和cookie)看起来我的代码是答案中提供的代码的副本;我究竟做错了什么?谢谢!
答案 0 :(得分:2)
首先,您应该查看HttpContext
属性的类型。它是HttpContextBase
,表示您的扩展参数应为this HttpContextBase
而不是this HttpContext
然后您需要using
您的扩展程序所在的namespace
才能使用它
答案 1 :(得分:0)
您可以使用动作过滤器。动作过滤器在您的动作方法之前被调用。