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ですが、これらは 2 つの異なるタイプのようです。のUserオブジェクトは、あまり情報を保持していないように見えますControllerIPrincipal

認証されたユーザーの残りのユーザー データを取得するにはどうすればよいですか? 何を割り当てる必要がありimagemodel.Userますか? それはそれを行う方法でもありますか、それともユーザーIDを保存したいだけであることを明示的に伝える必要がありますか(私はそれが理解できると仮定しています) - もしそうなら、どうすればUserオブジェクトをオンに保つことができますか?私のモデルは、実際の User オブジェクト (ID だけでなく) を指すようになっています。現在ログインしているユーザーのユーザー ID を取得するにはどうすればよいですか?

4

1 に答える 1

2

ログオンまたはセッションの管理に使用しているテクノロジによって異なります。

コントローラー メソッド内では、モデル プロパティを文字列値である 'User.Identity.Name' の値に設定したいだけかもしれません。

これは、ユーザーがログインしていて、フォーム認証が構成されていることを前提としています。おそらく以前にユーザーを認証し、FormsAuthentication.SetAuthCookie メソッドを介して、'.Name' の値を含むトークン (基本的には暗号化された Cookie のみ) をユーザーに与えています。

したがって、物事を非常に単純にするために、Image モデルにはおそらく Username 文字列プロパティのみを含める必要があります。ユーザー ID テーブルにアクセスできる場合は、代わりに関連ユーザーへの参照を保存することをお勧めします。

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 記事があなたの手に落ちます。

このトピックを調査するときは、MVC 参照よりも ASP.NET 参照を探すほうがよい場合もあります。

于 2012-08-31T02:59:24.220 に答える