0

我创建了非常简单的模型:

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(我假设它可以计算出这么多) - 如果是这样,我如何保持一个User对象我的模型指向真实的用户对象(不仅仅是一个 ID),我如何获取当前登录用户的用户 ID?

4

1 回答 1

2

这取决于您用于管理登录或会话的技术。

在控制器方法中,您可能只想将模型属性设置为“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

而已。

一旦您选择了提供商或决定实施自定义提供商,就会有一系列 SO 文章供您参考。

在研究这个主题时,寻找 ASP.NET 参考可能比 MVC 参考更好。

于 2012-08-31T02:59:24.220 回答