【问题标题】:ASP.Net MVC - How can a button access url query string parameters?ASP.Net MVC - 按钮如何访问 url 查询字符串参数?
【发布时间】:2022-01-02 04:09:59
【问题描述】:

我正在做一个密码重置项目。

用户会收到一封电子邮件,其网址如下: mysite.com/ResetPass?id=10&token=233rgths567sdsfg

这在 url 中包含一个用户 ID 和 JWT 令牌作为参数。

MVC 控制器显示密码重置页面。

        [HttpGet("ResetPass")]

        public IActionResult ResetPass([FromQuery] int id, [FromQuery] string token)
        {
            // How to send the id and token from the Url query string to the Button???

            return View("ResetPass");
        }


        // Reset Password Button
        [HttpPost]
        [ValidateAntiForgeryToken]
        public async Task<IActionResult> ResetPassButton()
        {
             // How to access the user id and token?
        }

我希望在此页面上有一个表单,允许用户更改密码,然后将新密码、用户 ID 和令牌发送到 API 进行处理。

但是如何从 url(用户 ID 和令牌)中获取变量到按钮?

我是否只使用 Viewbag 并将它们传递给页面? 或者有没有办法让按钮只访问 URL 查询字符串?

【问题讨论】:

  • 访问控制器中的Request(尽管在这种情况下,令牌已经绑定到参数..那么为什么要问这个问题呢?)并提取参数/构建模型/运行逻辑。将相关模型/值传递给视图。 (它们是如何提供的——ViewBag、TempData、Model 等——是一个单独的问题。)

标签: c# asp.net-mvc query-string


【解决方案1】:

您可以创建重置密码模型并传递此模型。示例:

public class ResetPasswordModel
{
    public int Id { set; get; }
    public string Token { set; get; }
}

然后:

    public IActionResult ResetPass([FromQuery] int id, [FromQuery] string token)
    {
        var model = new ResetPasswordModel {
           Id = id,
           Token = token,
        }

        return View("ResetPass", model);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> ResetPassButton(ResetPasswordModel model)
    {
         // do something with model
    }

【讨论】:

  • 谢谢 Adlorem,我试试看。
  • 当我执行上述操作时,ResetPassButton 中的 model.Id 和 model.Token 为空。我必须在 ResetPass.cshtml 网页上做些什么吗?
  • 我在表单中添加了不可见的字段,然后从 ResetPassButton() Form - @Html.Hidden("FormToken", Model.Token) Button Method - string token = Request.Form[" FormToken"]
  • 你不必使用表单。我更新了我的答案。除非您打算使用 antiforgerytoken,否则您可以使用操作链接。我认为它的方法要简单得多,但是您必须从控制器中删除防伪令牌验证。
猜你喜欢
  • 2010-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
相关资源
最近更新 更多