【发布时间】:2010-12-23 22:26:45
【问题描述】:
我正在考虑在我的视图中使用它来获取我网站的用户名(Razor 语法):
@MySite.Helpers.Utils.UserName
这里是 utils 类:
public class Utils
{
static FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
public static string UserName { get { return id.Ticket.UserData; } }
}
这段代码有什么潜在的问题吗?
我这样做的原因是因为我要在用户登录时将用户名存储在新 FormsAuthenticationTicket 的 userdata 字段中。
我正在这样处理它,因为我使用 facebook connect 并希望将 ID 存储在数据库的用户名字段中,并将他们的用户名/全名存储在单独的表中。
所以我处理 facebook 用户名和我的网站注册用户名的逻辑需要以不同方式处理。登录后我想在那里处理它,然后将 userdata 设置为实际用户名。
因此,在整个站点中,我可以使用以下方式获取登录用户名:@MySite.Helpers.Utils.UserName
这听起来好吗?它是一个静态变量这一事实会成为问题吗?
或者有没有更好的方法来管理这个?会话变量可能吗?
谢谢
【问题讨论】:
-
我很确定将
id存储为静态变量会给您带来问题。改为将其变为属性。 -
@jbinto 这是一个不准确的语句,因为操作的 id 值在运行时通过 HttpContext.Current 对象绑定到上下文实例。通过@raklos 的编码方式,您可以在运行时获取 id,如果您处于无法访问 HttpContext.Current 的状态,您将仅访问当前请求的 id,您将收到空引用错误。跨度>
标签: c# asp.net-mvc facebook forms-authentication