【问题标题】:Retrieving values from URL in HTTP Post从 HTTP Post 中的 URL 检索值
【发布时间】:2018-01-03 11:44:30
【问题描述】:

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

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

我可以在第一个实例中通过如下方法获取 Id 和 Token:

[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 和 Token。这是表单的样子:

       <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 和令牌再次验证用户。我尝试将它们本地存储在控制器中,但这不起作用。

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

【问题讨论】:

    标签: html asp.net http-post


    【解决方案1】:

    你可以使用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 });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-03
      • 1970-01-01
      • 1970-01-01
      • 2014-11-26
      • 2014-05-18
      相关资源
      最近更新 更多