C# 无法重定向到asp.net core中的本地页面
我不熟悉asp.net核心。我已用于登录和注册。我试图在成功登录后重定向到我的页面C# 无法重定向到asp.net core中的本地页面,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我不熟悉asp.net核心。我已用于登录和注册。我试图在成功登录后重定向到我的页面 public async Task<IActionResult> OnPostAsync(string returnUrl = null) { returnUrl = Url.Content("~/Home/Index"); if (ModelState.IsValid) { // This does
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = Url.Content("~/Home/Index");
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
}
// If we got this far, something failed, redisplay form
return Page();
}
更新1
下面是我的Login.cshtml.cs
namespace DemoLogin.Areas.Identity.Pages.Account
{
[AllowAnonymous]
public class LoginModel : PageModel
{
private readonly UserManager<DemoLoginUser> _userManager;
private readonly SignInManager<DemoLoginUser> _signInManager;
private readonly ILogger<LoginModel> _logger;
public LoginModel(SignInManager<DemoLoginUser> signInManager,
ILogger<LoginModel> logger,
UserManager<DemoLoginUser> userManager)
{
_userManager = userManager;
_signInManager = signInManager;
_logger = logger;
}
[BindProperty]
public InputModel Input { get; set; }
public IList<AuthenticationScheme> ExternalLogins { get; set; }
public string ReturnUrl { get; set; }
[TempData]
public string ErrorMessage { get; set; }
public class InputModel
{
[Required]
[EmailAddress]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Remember me?")]
public bool RememberMe { get; set; }
}
public async Task OnGetAsync(string returnUrl = null)
{
if (!string.IsNullOrEmpty(ErrorMessage))
{
ModelState.AddModelError(string.Empty, ErrorMessage);
}
returnUrl = returnUrl ?? Url.Content("~/");
// Clear the existing external cookie to ensure a clean login process
await HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
ExternalLogins = (await _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
ReturnUrl = returnUrl;
}
public async Task<IActionResult> OnPostAsync(string returnUrl = null)
{
returnUrl = returnUrl ?? Url.Content("~/");
if (ModelState.IsValid)
{
// This doesn't count login failures towards account lockout
// To enable password failures to trigger account lockout, set lockoutOnFailure: true
var result = await _signInManager.PasswordSignInAsync(Input.Email, Input.Password, Input.RememberMe, lockoutOnFailure: false);
if (result.Succeeded)
{
_logger.LogInformation("User logged in.");
return LocalRedirect(returnUrl);
}
if (result.RequiresTwoFactor)
{
return RedirectToPage("./LoginWith2fa", new { ReturnUrl = returnUrl, RememberMe = Input.RememberMe });
}
if (result.IsLockedOut)
{
_logger.LogWarning("User account locked out.");
return RedirectToPage("./Lockout");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid login attempt.");
return Page();
}
}
// If we got this far, something failed, redisplay form
return Page();
}
}
}
namespace DemoLogin.Areas.Identity.Pages.Account
{
[异名]
公共类LoginModel:PageModel
{
私有只读用户管理器_UserManager;
专用只读签名管理器\u签名管理器;
专用只读ILogger\u记录器;
公共登录模型(SignInManager SignInManager,
ILogger记录器,
用户管理器(用户管理器)
{
_userManager=userManager;
_signInManager=signInManager;
_记录器=记录器;
}
[BindProperty]
公共输入模型输入{get;set;}
公共IList外部登录{get;set;}
公共字符串ReturnUrl{get;set;}
[临时数据]
公共字符串错误消息{get;set;}
公共类输入模型
{
[必需]
[电邮地址]
公共字符串电子邮件{get;set;}
[必需]
[数据类型(数据类型.密码)]
公共字符串密码{get;set;}
[显示(Name=“记得我吗?”)]
公共布尔记忆{get;set;}
}
公共异步任务OnGetAsync(字符串返回URL=null)
{
如果(!string.IsNullOrEmpty(ErrorMessage))
{
AddModelError(string.Empty,ErrorMessage);
}
returnUrl=returnUrl??Url.Content(“~/”);
//清除现有的外部cookie以确保干净的登录过程
等待HttpContext.SignOutAsync(IdentityConstants.ExternalScheme);
ExternalLogins=(wait _signInManager.GetExternalAuthenticationSchemesAsync()).ToList();
ReturnUrl=ReturnUrl;
}
公共异步任务OnPostAsync(字符串returnUrl=null)
{
returnUrl=returnUrl??Url.Content(“~/”);
if(ModelState.IsValid)
{
//这不会将登录失败计入帐户锁定
//要启用密码故障触发帐户锁定,请设置lockoutOnFailure:true
var result=wait _signInManager.PasswordSignInAsync(Input.Email、Input.Password、Input.RememberMe、lockoutOnFailure:false);
if(result.successed)
{
_logger.LogInformation(“用户登录”);
返回LocalRedirect(returnUrl);
}
if(结果要求系数)
{
return RedirectToPage(“./LoginWith2fa”,新的{ReturnUrl=ReturnUrl,RememberMe=Input.RememberMe});
}
如果(结果IsLockedOut)
{
_logger.LogWarning(“用户帐户锁定”);
返回重定向Topage(“/锁定”);
}
其他的
{
AddModelError(string.Empty,“登录尝试无效”);
返回页();
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回页();
}
}
}
我已经注册了一个用户,然后尝试登录。但是我没有重定向到我的页面
~/Home/Index
我想我知道问题所在,您是否在索引方法中添加了[Authorize]
属性
这是解决办法
将订单更改为:
app.UseAuthentication();
app.UseAuthorization();
炫耀:
由于您的项目中有很多错误,我建议您创建一个新项目并按照我的步骤进行操作。这很简单
步骤1:(更改身份验证):
步骤2:(单击项目添加
,然后单击新建脚手架项目
):
步骤3:(选择标识,然后添加):
步骤4(覆盖所有文件,然后添加):
最后:迁移并运行project。首先注册,然后登录。是否成功登录?@NeutralHandle是,它正在成功登录。redirect不能与post一起使用。@NeutralHandle确定,然后做什么?或者在成功响应后从客户端重定向。。。[我自己也在读一点关于这个话题的书,因为我没有完全的理解,所以我选择了后重定向get,而这种行为似乎会阻止它。]评论不用于长时间的讨论;这段对话已经结束。
app.UseAuthentication();
app.UseAuthorization();