1

VS'12 asp.net MVC4 C# InternetApplication と KendoUI および Simplemembership EF コードを最初に使用します。

これは、VS が最初に提供するものです。

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
                WebSecurity.Login(model.UserName, model.Password);
                return RedirectToAction("Index", "Home");
. 
.
.

RedirectToActionこれが私のController Controllerに送信したい場所ChangeUsersInfoで、新しく作成されたユーザーのIDを送信します。

私が試したIDを取得するには

1.

               var UserID = (from u in db.UserProfiles
                            where u.UserName == User.Identity.Name
                            select new
                            {
                               UserID = u.UserID
                            }).Single();

2.

  var userID = System.Web.Security.Membership.GetUser().ProviderUserKey;
  1. return RedirectToAction("Edit","ChangeUsersInfo", userID);

  2. return RedirectToAction("Edit","ChangeUsersInfo");また、変数なしでそこに送信できるかどうかも確認しようとしました。

何らかの理由で

  1. 返される変数 = Null
  2. 返される変数 = Null
  3. 1と2が機能しなかったため機能しません
  4. EDIT新しいものではなく、LOG IN画面にリダイレクトされるようです

null と失敗したリダイレクトの背後にある理由は何ですか?

はい、データベースにはユーザーがいます

4

1 に答える 1

1
var userID = System.Web.Security.Membership.GetUser().ProviderUserKey;

WebSecurity および System.Web.Security アイテムの使用は、認証 Cookie をクライアントにまだ送り返していないため、後続のリクエストでのみ機能します (ここからデータが取得されます)。そのため、リダイレクト URL でユーザーのユーザー ID を送信する必要さえないはずです...彼らはログインしており、目的のコントローラー/アクションで取得できます。認証チケットから userId を取得することにより、URL で渡されたユーザー ID が実際に現在ログインしているユーザーであるかどうかを確認する必要がなくなりました。

例:

ログイン方法

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Register(RegisterModel model)
    {
        if (!ModelState.IsValid)
        {
             //send em back with the errors
             Return View();
        }
        try
        {
            WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
            WebSecurity.Login(model.UserName, model.Password);
            return RedirectToAction("Index", "ChangeUsersInfo");
        }...
    }

ユーザー情報コントローラーの変更

[Authorize]
public ActionResult Index()
{
    var userId = WebSecurity.CurrentUserId;
    var model = GetUserInfoService.GetUserInfo(userId);
    Return View(model);
}
于 2013-08-22T22:12:22.653 に答える