我创造了我非常简单的模型:
public class ImageModel
{
public int Id { get; set; }
public string FileName { get; set; }
}
现在我想用登录用户存储记录。据推测,我会通过添加另一个属性来做到这一点:
public User User { get; set; }
Visual Studio告诉我的是告诉我在
using System.Web.Providers.Entities;
假设这是与当前经过身份验证的用户对应的正确User
类,如何使用我的模型保存该类?
我的Create
操作如下所示:
[HttpPost]
public ActionResult Create(ImageModel imagemodel)
{
if (ModelState.IsValid)
{
db.ImageModels.Add(imagemodel);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(imagemodel);
}
我想我想添加像
这样的东西 imagemodel.User = User;
在db.ImageModels.Add
之上,但这些似乎是两种不同的类型。 User
中的Controller
对象似乎是IPrincipal
,它实际上似乎根本没有太多信息。
如何获取经过身份验证的用户的其余用户数据?我需要将imagemodel.User
分配给哪些人?甚至是这样做的方式,或者我是否需要明确地告诉它我只想保存用户ID(我假设它可以解决这个问题) - 如果是这样,我该如何保持{{ 1}}我的模型上的对象,它指向真正的用户对象(不仅仅是一个ID),如何获取当前登录用户的用户ID?
答案 0 :(得分:2)
这取决于您使用何种技术来管理登录或会话。
在控制器方法中,您可能只想将model属性设置为'User.Identity.Name'中的值,这是一个字符串值。
假设用户已登录并且您已配置表单身份验证。您之前可能已对用户进行了身份验证,并通过FormsAuthentication.SetAuthCookie方法为其提供了包含“.Name”值的令牌(基本上只是一个加密的cookie)。
因此,为了使事情变得非常简单,您的Image模型应该只具有Username字符串属性。如果您有权访问用户身份表,则可能需要存储对相关用户的引用。
public class ImageModel
{
public int Id { get; set; }
public string FileName { get; set; }
public string Username { get; set; }
}
...控制器
[HttpPost]
public ActionResult Create(ImageModel imagemodel)
{
if (ModelState.IsValid && User.Identity.IsAuthenticated)
{
imagemodel.Username = User.Identity.Name;
db.ImageModels.Add(imagemodel);
db.SaveChanges();
return RedirectToAction("Index");
}
在不知道您使用的提供程序的情况下暴露的接口非常少。
IPrinicipal User
bool IsInRole(string role)
IIdentity Identity
string AuthenticationType
bool IsAuthenticated
string Name
就是这样。
一旦您选择了提供商或决定实施custom one,就会有一系列SO文章落入您的行列。
在研究此主题时,您可能还会更好地寻找ASP.NET引用而不是MVC引用。