我正在使用IdentityServer开发.netcore3应用程序,在示例ForgotPassword页面(我正在使用(中,他们为用户生成一个令牌并通过电子邮件发送,如下所示:
var code = await _userManager.GeneratePasswordResetTokenAsync(user);
var callbackUrl = Url.Page(
"/Account/ResetPassword",
pageHandler: null,
values: new { code },
protocol: Request.Scheme);
await _emailSender.SendEmailAsync(
Input.Email,
"Reset Password",
$"Please reset your password by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");
然后在 ResetPassword 类中,它使用传入的令牌(加上用户和新密码(重置密码var result = await _userManager.ResetPasswordAsync(user, Input.Code, Input.Password);
但是,顶部的 Url.Page 调用获取代码并小写整个内容,我相信这会导致ResetPasswordAsync抛出InvalidToken。
知道如何在不降低代码的情况下让 Url.Page 生成绝对 url 吗?
在我的创业.cs中,我有
services.Configure<RouteOptions>(options =>
{
options.LowercaseUrls = true;
options.LowercaseQueryStrings = true;
});
一旦我删除了它,它就修复了重置密码。 现在我只需要确保我在这个过程中没有破坏任何其他东西