在ASP.NET Core登录重定向中,可以通过以下步骤强制returnUrl为绝对URI类型:
Uri.IsWellFormedUriString
方法进行验证。UrlHelper
类的IsLocalUrl
方法来判断是否为本地URL。如果是本地URL,则将其转换为绝对URI类型。以下是一个示例代码:
[HttpPost]
public async Task<IActionResult> Login(LoginViewModel model, string returnUrl = null)
{
// 验证模型并进行登录逻辑
if (ModelState.IsValid)
{
// 验证用户名和密码
// 如果验证成功
if (result.Succeeded)
{
// 检查returnUrl是否为绝对URI类型
if (!Uri.IsWellFormedUriString(returnUrl, UriKind.Absolute))
{
// 检查returnUrl是否为本地URL
if (Url.IsLocalUrl(returnUrl))
{
// 将本地URL转换为绝对URI类型
returnUrl = Url.Action("Index", "Home", null, Request.Scheme);
}
else
{
returnUrl = null; // 或者设置默认的重定向URL
}
}
return Redirect(returnUrl);
}
else
{
ModelState.AddModelError("", "无效的用户名或密码");
}
}
return View(model);
}
在上述示例中,我们首先使用Uri.IsWellFormedUriString
方法验证returnUrl是否为绝对URI类型。如果不是,我们再使用Url.IsLocalUrl
方法判断是否为本地URL。如果是本地URL,我们使用Url.Action
方法将其转换为绝对URI类型。最后,使用Redirect
方法进行重定向。
这样,无论是绝对URI类型还是本地URL,都可以正确地进行重定向,并确保安全性。
领取专属 10元无门槛券
手把手带您无忧上云