使用区域时如何使 RedirectToPage 工作
How to make the RedirectToPage work When Using Areas
我正在开发用于测试的 .NET 6 Web 应用程序,运行 在使用区域时遇到 Razor 页面中的 RedirectToPage 问题。详情如下。
测试环境
ASP.NET 框架:.NET 6
应用程序模式:Razor 页面(无 MVC)
身份验证:使用简单的 cookie
IDE: Visual Studio 2022
开发机器:Windows11
项目结构
MyProject
Areas
|----Public
|----Pages
......
|----Internal
|----Pages
|---- Index.cshtml
|---- Authenticate
|---- UserLogin.cshtml
UserLogin.cs
|---- Products
|---- Services
Pages
|---- Shared
|---- Index.cshtml
|---- Error.cshtml
问题描述
用户在 UserLogin.cshtml 页面提供凭据后,UserLogin.cs class 中的“OnPost”方法将处理验证。如果登录成功,它应该将用户重定向到内部区域根目录中的Index.cshtml页面(见下面的代码段)。
我尝试了不同的方法来在 RedirectToPage 语句中指定页面名称。但是,其中 none 有效。 (注意:使用浏览器,我可以使用 url"http://localhost:12345/Internal/Index")
访问索引页面
"Index"
"/Index"
"./Index"
"/Internal/Index" (without using 2nd input param)
"./Internal/Index" (without using 2nd input param)
public async Task<IActionResult> OnPost()
{
// verify user ID and password against DB
bool IsVerified = CheckUserLogin(LoginUser.UserId, LoginUser.Password);
if (IsVerified)
{
var claims = new List<Claim>();
claims.Add(new Claim("username", LoginUser.UserId));
claims.Add(new Claim(ClaimTypes.NameIdentifier, LoginUser.UserId));
// test statement for using name property in claim
claims.Add(new Claim(ClaimTypes.Name, LoginUser.FullName));
//test statements for using user role property in clain
claims.Add(new Claim(ClaimTypes.Role, "admin,research"));
var claimIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var claimPrinciple = new ClaimsPrincipal(claimIdentity);
await HttpContext.SignInAsync(claimPrinciple);
return RedirectToPage("Index", new { area = "Internal" });
}
return Page();
}
问题
在 RedirectToPage 语句中为 Area 下的 razor 页面指定“路由”的正确方法是什么?
根据你的结构,我建议你有两种选择:
选项 1:如果您使用 Razor View,请尝试 return RedirectToPage("../Index");
选项 2:如果您使用 Razor Page,请尝试 return RedirectToPage("/Index", new { area = "Internal" });
我正在开发用于测试的 .NET 6 Web 应用程序,运行 在使用区域时遇到 Razor 页面中的 RedirectToPage 问题。详情如下。
测试环境
ASP.NET 框架:.NET 6 应用程序模式:Razor 页面(无 MVC) 身份验证:使用简单的 cookie IDE: Visual Studio 2022 开发机器:Windows11
项目结构
MyProject
Areas
|----Public
|----Pages
......
|----Internal
|----Pages
|---- Index.cshtml
|---- Authenticate
|---- UserLogin.cshtml
UserLogin.cs
|---- Products
|---- Services
Pages
|---- Shared
|---- Index.cshtml
|---- Error.cshtml
问题描述
用户在 UserLogin.cshtml 页面提供凭据后,UserLogin.cs class 中的“OnPost”方法将处理验证。如果登录成功,它应该将用户重定向到内部区域根目录中的Index.cshtml页面(见下面的代码段)。
我尝试了不同的方法来在 RedirectToPage 语句中指定页面名称。但是,其中 none 有效。 (注意:使用浏览器,我可以使用 url"http://localhost:12345/Internal/Index")
访问索引页面"Index"
"/Index"
"./Index"
"/Internal/Index" (without using 2nd input param)
"./Internal/Index" (without using 2nd input param)
public async Task<IActionResult> OnPost()
{
// verify user ID and password against DB
bool IsVerified = CheckUserLogin(LoginUser.UserId, LoginUser.Password);
if (IsVerified)
{
var claims = new List<Claim>();
claims.Add(new Claim("username", LoginUser.UserId));
claims.Add(new Claim(ClaimTypes.NameIdentifier, LoginUser.UserId));
// test statement for using name property in claim
claims.Add(new Claim(ClaimTypes.Name, LoginUser.FullName));
//test statements for using user role property in clain
claims.Add(new Claim(ClaimTypes.Role, "admin,research"));
var claimIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
var claimPrinciple = new ClaimsPrincipal(claimIdentity);
await HttpContext.SignInAsync(claimPrinciple);
return RedirectToPage("Index", new { area = "Internal" });
}
return Page();
}
问题 在 RedirectToPage 语句中为 Area 下的 razor 页面指定“路由”的正确方法是什么?
根据你的结构,我建议你有两种选择:
选项 1:如果您使用 Razor View,请尝试 return RedirectToPage("../Index");
选项 2:如果您使用 Razor Page,请尝试 return RedirectToPage("/Index", new { area = "Internal" });