从HTTP Post中的URL中检索值

问题描述 投票:0回答:1

我正在努力从网址中获取值,因此我可以在ASP.Net核心中使用它们。该网址将如下所示:

/ResetPassword?id=17&token=a1f5995d-54ab-48a4-adef-4c914b58aed2

我可以在第一个实例中使用如下方法获取Id和令牌:

[Route("resetpassword")]
public async Task<IActionResult> ResetPassword(int id, string token)
{
    if (await _profileService.VerifyUser(id, token))
    {
        return View(new ResetPasswordViewModel { Id = id, Token = token });
    }
    return View(new ResetPasswordViewModel { ErrorCode = 1 });
}

如您所见,我会进行检查以确保我可以验证用户。然后,这会将用户带到另一个屏幕,在那里他们填写几个输入并点击提交按钮。我正在使用HTTP帖子,所以我可以得到用户的输入但是我不能再锻炼如何检索Id和令牌。这就是表单的样子:

       <form method="post" asp-controller="Profile" asp-action="ResetPassword"
              asp-route-returnUrl="@Context.Request.Query["returnUrl"]">
            <img class="card-img-top user-image" src="~/images/user.svg" alt="Card image cap">
            <div class="form-group row">
                <div class="col">
                    <input type="password" class="form-control" asp-for="Password" placeholder="New Password" />
                </div>
            </div>
            <div class="form-group row">
                <div class="col">
                    <input type="password" class="form-control" asp-for="ConfirmPassword" placeholder="Confirm Password" />
                </div>
            </div>
            <div class="form-group row">
                <div class="col">
                    <button class="btn btn-success" type="submit" name="button" style="width: 100%;">Reset Password</button>
                </div>
            </div>
        </form>

然后这是HTTP Post动作:

[Route("resetpassword")]
[HttpPost]
public async Task<IActionResult> ResetPassword(int id, string token, 
                                               string password, string confirmPassword)
{
    if (await _profileService.VerifyUser(id, token))
    {
        //Do something with passwords
    }
    return View(new ResetPasswordViewModel { ErrorCode = 1 });
}

所以发布到此方法的密码我能够检索但我无法再使用Id和Token来验证用户。我已经尝试将它们本地存储在控制器中,但这不起作用。

我是否需要有两个隐藏的输入来存储那些可以在表单中提交的值?我认为对于我想要实现的目标会有更清晰的解决方案,所以我发布了这个问题。

html asp.net http-post
1个回答
0
投票

你可以使用TempData;

if (await _profileService.VerifyUser(id, token))
{
    TempData["ResetPassword_id"] = id;
    TempData["ResetPassword_token"] = token;
    return View(new ResetPasswordViewModel { Id = id, Token = token });
}

然后得到idtoken;

[Route("resetpassword")]
[HttpPost]
public async Task<IActionResult> ResetPassword(int id, string token,
    string password, string confirmPassword)
{
    var id = (int)TempData["ResetPassword_id"];
    var token = (string)TempData["ResetPassword_token"];
    if (await _profileService.VerifyUser(id, token))
    {
        //Do something with passwords
    }
    return View(new ResetPasswordViewModel { ErrorCode = 1 });
}
© www.soinside.com 2019 - 2024. All rights reserved.