Почему моя строка с кодом обрезается, когда я передаю ее из представления в контроллер? - PullRequest
0 голосов
/ 18 октября 2018

Я сбросил токен пароля:

 string resetPasswordToken = await _userManager.GeneratePasswordResetTokenAsync(user);

После того как я перешел на сброс пароля по ссылке электронной почты, я передаю этот токен и электронное письмо для просмотра:

  [HttpGet]
    public IActionResult ResetPassword([FromQuery] string token, string email)
    {
        var model = new ResetPasswordViewModel
        {
            Email = email,
            Token = token
        };
        return View(model);
    }

Проблема заключается в том, что япри попытке передать этот токен из представления в контроллер токен обрезается перед символом + или "".Мой взгляд:

<form 
          method="post" action="reset">
        <input name="Email" type="hidden" value=@Model.Email>
        <input name="Token" type="hidden" value=@Model.Token/>
        <div class="form-group">
            <label name="NewPassword" class="control-label">New Password</label>
            <input name="NewPassword" class="form-control" />

        </div>
        <div class="form-group">
            <label name="ConfirmNewPassword" class="control-label">Confirm New Password</label>
            <input name="ConfirmNewPassword" class="form-control" />
        </div>

        <div class="form-group">
            <input type="submit" value="Save" class="btn btn-success" />
        </div>
    </form>

POST:

[HttpPost]
  [Route("reset")]
    public async Task<IActionResult> ResetPassword(ResetPasswordViewModel model)
    {
        if (!ModelState.IsValid)
            return View(model);

        var user = await _userManager.FindByEmailAsync(model.Email);
        if (user == null)
            return RedirectToAction("ResetPasswordConfirm");

        var result = await _userManager.ResetPasswordAsync(
            user, model.Token, model.NewPassword);
        if (result.Succeeded)
            return RedirectToAction("ResetPasswordConfirm");

        foreach (var error in result.Errors)
            ModelState.AddModelError(string.Empty, error.Description);

        return View(model);
    }

Токен:

CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe+VMzEQna/oNfdB9G3NWxq05wnuLfERKVFiMXMaodDsMV9G6b+J7fJCv8i1QmzR6X/vg/fDNkhmm37m1rJf0TZ41LEiBgthYS9RC/Cg785SaBN0O3VbO+nW/9WRZU1DzIU/ik2/CgkW1gqu9/FszQxVy0GtC

Токен после обрезки:

CfDJ8IgVu4V4NxlJoKOV2esH3C3b0PdYklCHqKIB5Qsh0bvnrX4AXaDWgnpJbwCRupsVEKuOYxPctOSe7VqQe

1 Ответ

0 голосов
/ 18 октября 2018

Вы пропускаете " вокруг значений атрибута.

Это:

<input name="Token" type="hidden" value=@Model.Token/>

Должно быть так:

<input name="Token" type="hidden" value="@Model.Token"/>

Однако вы должны учитыватьиспользование помощников тегов вместо создания значения атрибута вручную, поэтому вам не нужно беспокоиться о кодировке HTML, например:

<input type="hidden" asp-for="Token" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...