這不會有幾個原因的工作:
cmd.parameters.addwithvalue("user_id".httpcontext.current.user.identity");
- 它不會編譯 - 注:請包括在以後的例子編譯代碼。
Identity
這裏是一個IIdentity
。這不會轉換爲int
。
- 用戶ID是不存儲,也不可用,關閉
IPrincipal
。
您需要通過往返數據庫來恢復用戶ID。唯一可用的東西是HttpContext.Current.User.Identity.Name
。
現在,我已經在過去做的是一個方法添加到我的UserProfile
模型,你知道,這就是使用你利用實際創建用戶記錄中的供應商時,這就是所謂的一個:
WebSecurity.CreateUserAndAccount(model.UserName, model.Password,
new
{
// additional profile fields are passed as an anonymous type
CustomField1 = model.CustomField1
});
這裏是UserProfile
方法:
public static int? PrincipalUserId(IPrincipal user)
{
if (!user.Identity.IsAuthenticated)
{
return null;
}
var key = string.Format("userid_{0}", user.Identity.Name);
int userId;
if (!SharedCacheManager.TryGetValue<int>(key, out userId))
{
using (UsersContext udb = new UsersContext())
{
userId = udb.UserProfiles
.Where(up => up.UserName == user.Identity.Name)
.First().UserId;
}
SharedCacheManager.SetValue<int>(key, userId);
}
return userId;
}
這裏是SharedCacheManager
:
public static class SharedCacheManager
{
public static bool TryGetValue<T>(string key, out T result)
{
var cache = HttpContext.Current.Cache;
object o = cache[key];
if (o == null)
{
result = default(T);
return false;
}
else if (o.GetType() != typeof(T))
{
result = default(T);
return false;
}
result = (T)o;
return true;
}
public static void SetValue<T>(string key, T val)
{
var cache = HttpContext.Current.Cache;
cache[key] = val;
}
}
現在,所有這些代碼不會只是下降到您的解決方案。但它可以很容易地修改。
'HttpContext.Current.User.Identity.Name'是你的用戶名 - 例如'蘇珊' - 你想如何將其轉換爲'int'? –