如何获取我的控制器的url参数?

一些名字

我正在使用ASP.NET Identity重置用户密码。但是,该令牌未在我的控制器中获取。当我提交表格时,它说

“令牌字段为必填。”

为什么不领取我的令牌?以下代码用于生成resetLink:

    var user = _userManager.FindByNameAsync(email).Result;

    if (user == null || !_userManager.IsEmailConfirmedAsync(user).Result)
    {
        ViewBag.Message = "Error while resetting your password!";
        return View("ResetPassword");
    }

    var token = _userManager.
          GeneratePasswordResetTokenAsync(user).Result;

    var resetLink = Url.Action("SetPassword",
                    "Auth", new { token },
                     protocol: HttpContext.Request.Scheme);

生成链接: http://localhost:50015/adviseur/auth/setpassword?token=someverylongnumbers

该链接转到以下视图,视图模型和控制器:AuthController.cs

[HttpGet]
public IActionResult SetPassword()
{
    return View();
}

SetPassword.cshtml

@model SetPasswordModel

<h1>Set Your Password</h1>

<form asp-controller="Auth"
      asp-action="RequestNewPassword"
      method="post">

    <input type="hidden" asp-for="Token" />
    <table>
        <tr>
            <td><label asp-for="UserName"></label></td>
            <td><input asp-for="UserName" /></td>
        </tr>
        <tr>
            <td>
                <label asp-for="Password">
                    New Password
                </label>
            </td>
            <td><input asp-for="Password" /></td>
        </tr>
        <tr>
            <td>
                <label asp-for="ConfirmPassword">
                    Confirm New Password
                </label>
            </td>
            <td><input asp-for="ConfirmPassword" /></td>
        </tr>
        <tr>
            <td colspan="2">
                <input type="submit"
                       value="Reset Password" />
            </td>
        </tr>
    </table>

    <div asp-validation-summary="All"></div>

</form>

SetPasswordModel.cs:

#region Using

using System.ComponentModel.DataAnnotations;

#endregion

namespace x.Areas.Adviseur.ViewModels
{
    public class SetPasswordModel
    {
        [Required]
        public string UserName { get; set; }
        [Required]
        [DataType(DataType.Password)]
        public string Password { get; set; }
        [Required]
        [DataType(DataType.Password)]
        public string ConfirmPassword { get; set; }
        [Required]
        public string Token { get; set; }
    }
}

该表格向以下控制器发出请求:

[HttpPost]
public IActionResult RequestNewPassword(SetPasswordModel obj)
{
    User user = _userManager.FindByNameAsync(obj.UserName).Result;
    IdentityResult result = _userManager.ResetPasswordAsync(user, obj.Token, obj.Password).Result;

    if (result.Succeeded)
    {
        ViewBag.Message = "Password reset successful!";
        return View("Login");
    }
    else
    {
        ViewBag.Message = "Error while resetting the password!";
        return View("SetPassword");
    }
}
阿提亚尔

令牌未在我的控制器中领取

那是因为您还没有发送。您不会从URL收集令牌以在下一步中使用它。因此,在RequestNewPassword操作方法中,模型联编程序无法在Token表单字段中找到值,并且无法创建SetPasswordModel没有该Token属性对象,因为您已将其标记为Required因此,抱怨-

“令牌字段为必填。”

根据您的SetPassword操作方法-

  1. 添加一个名为token方法的字符串参数,以便模型绑定程序可以从url收集令牌字符串
  2. 通过ViewBag或模型将令牌传递到视图
[HttpGet]
public IActionResult SetPassword(string token)
{
    ViewBag.Token = token;
    return View();

    // OR,
    // var model = new SetPasswordModel { Token = token };
    // return View(model);
}

如果您通过模型传递令牌,则视图中无需更改。但是,如果您将其传递给ViewBag,则将其设置为Token表单字段-

<input type="hidden" asp-for="Token" value="@ViewBag.Token" />

现在,当您提交表单时,使用RequestNewPasswordaction方法,模型绑定器将能够SetPasswordModel为您创建一个对象,而无需抱怨。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

我如何在控制器中获取post参数

来自分类Dev

如何在Magento控制器中获取url参数?

来自分类Dev

如何重写我的控制器URL?

来自分类Dev

为什么我无法在控制器中获取参数?

来自分类Dev

我如何在Laravel控制器中获取组参数

来自分类Dev

Laravel 4:从控制器获取URL参数

来自分类Dev

Rails,通过参数获取引擎控制器操作的URL

来自分类Dev

Laravel 4:从控制器获取url参数

来自分类Dev

Laravel 5如何使用带有控制器登录方法的URL获取参数

来自分类Dev

如何在我的AngularJS控制器中获取特定于环境的URL?

来自分类Dev

如何从按钮获取我的 ID 到我的控制器?

来自分类Dev

如何在Codeigniter控制器中获取参数值?

来自分类Dev

如何从@PathVariable获取参数到AngularJS控制器

来自分类Dev

如何从collection_select获取控制器中的参数

来自分类Dev

如何从控制器获取带有参数/标志的值

来自分类Dev

如何在symfony控制器中获取服务的参数?

来自分类Dev

如何在codeigniter中获取控制器方法参数?

来自分类Dev

如何从控制器中的URL访问参数值?

来自分类Dev

我如何从mongodb获取值到angularjs控制器

来自分类Dev

我如何使用Laravel在控制器内部获取数据

来自分类Dev

Spring MVC:如何为控制器获取正确的URL?

来自分类Dev

获取Json控制器方法的参数

来自分类Dev

Sails.JS 如何在控制器中获取 HTTP GET 方法以正确处理 URL 参数

来自分类Dev

如何从uiviewcontainer的控制器获取父控制器

来自分类Dev

从控制器中的URL获取协议

来自分类Dev

从URL,Laravel获取控制器操作

来自分类Dev

如何从控制器存根参数?

来自分类Dev

如何向控制器发送参数?

来自分类Dev

如何从控制器传递参数?

Related 相关文章

热门标签

归档