您在Asp.NET应用程序中看到或用于访问当前登录用户的最好的模式是什么?
当前用户是指代表您的系统中的用户的业务对象,无论是成员资格用户对象还是自定义类。 用户对象应该很容易在全局(httpapplication对象),Web表单,控制器,webhandler等地方到达。它可能被发送到项目的后端层,有时会注入其他业务对象,具体取决于你的申请。
要求:
答案 0 :(得分:2)
我实际上对已经内置的ASP.NET很满意:
if (User.Identity.IsAuthenticated)
{
string currentlyLoggedUsername = User.Identity.Name;
// TODO: Now given this username you could query your repository
// or the Membership provider to fetch additional user information.
}
答案 1 :(得分:2)
这是我用来存储一个对象而不是一个我觉得不太有用的名字。
在我的帐户管理员中:
public static User CacheUserInSession(User user)
{
Contract.Assert(user != null);
if (user == null) // Not found, name may have changed
{
new FormsAuthenticationService().SignOut();
}
else
{
// Save off the user for later use by other classes
ContextCache<User>.Set(user, ContextCache.AspNetUserSessionCache);
ContextCache<int>.Set(user.RowId, ContextCache.UserIdSessionCache);
}
return user;
}
public static User GetUserFromSession()
{
var user = ContextCache<User>.Get(ContextCache.AspNetUserSessionCache);
return user;
}
我的缓存类:
public class ContextCache<T>
{
public static void Set(T objectToCache, string key)
{
System.Web.HttpContext.Current.Items.Add(key, objectToCache);
}
public static T Get(string key)
{
return (T)System.Web.HttpContext.Current.Items[key];
}
}
我从Application_AuthenticateRequest调用CacheUserInSession传递我从数据库中读取的User对象/模型。
当我想要检索用户时,我会拨打这个电话:
var user = AccountController.GetUserFromSession();
使用缓存包装器,您可以存储/检索任何类型的对象。
没有一团糟。不用大惊小怪。