我正在使用 ASP.NET Core 2.1 创建身份服务器。我使用 Asp Identity,并搭建了登录和注册页面。
我有以下页面:
[AllowAnonymous]
public class RegisterModel : PageModel
{
......
public string ReturnUrl { get; set; }
......
public void OnGet(string returnUrl = null)
{
ReturnUrl = returnUrl;
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
return LocalRedirect(returnUrl);
}
return Page();
}
cshtml 包含:
@page
@model RegisterModel
......
<form asp-route-returnUrl="@Model.ReturnUrl" method="post">
......
行为:我通过以下链接登陆页面:https://localhost:5028/Identity/Account/Register?returnUrl=testlink https://localhost:5028/Identity/Account/Register?returnUrl=testlink,因此 ReturnUrl 在 OnGet() 中设置为“testlink”并传递到表单。
- 正确:如果我创建一个没有验证错误的用户(ModelState 有效),则使用“testlink”调用 LocalRedirect(returnurl)。
- 错误:如果我创建的用户存在验证错误(ModelState 无效),则 return Page() 会被调用。问题是,在这种情况下,页面是使用空模型生成的(@Model.ReturnUrl 为 null)。用户看到表单中的验证错误并进行更正,但是当他提交表单时,他不会被重定向到“testlink”,因为它丢失了。
我的问题:我用什么来代替”返回页面();“这样我就可以纠正案例 2 中描述的行为?我尝试过”return LocalRedirect("/Identity/Account/Register?returnUrl=" + returnUrl)”,但这会刷新页面(清除用户输入并且不显示验证错误消息)。
谢谢你!
Set the ReturnUrl
POST 上的属性,以便在页面重新加载时可用。
public IActionResult OnPost(string returnUrl = null) {
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid) {
return LocalRedirect(returnUrl);
}
//...if we get this far something went wrong.
//reset properties on model so they appear when page reloads
ReturnUrl = returnUrl;
return Page();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)