迁移到 ASP.NET 3.1 - 从登录控制器路由到 Razor 页面主页索引页面不再工作
Posted
技术标签:
【中文标题】迁移到 ASP.NET 3.1 - 从登录控制器路由到 Razor 页面主页索引页面不再工作【英文标题】:Migration to ASP.NET 3.1 - routing from Login Controller to Razor Page Home Index page no longer working 【发布时间】:2020-05-13 02:50:27 【问题描述】:我已将我的应用程序从 2.2 升级到 ASP.NET core 3.1。但是,成功登录后,从我的 AuthenticationController 登录操作到 RazorPage 主页区域索引页面的路由不再有效。这是我的代码的相关部分:
public void Configure(IApplicationBuilder app
// Add JWToken to all incoming HTTP Request Header
app.Use(async (context, next) =>
var JWToken = context.Session.GetString("JWToken");
if (!string.IsNullOrEmpty(JWToken))
context.Request.Headers.Add("Authorization", "Bearer " + JWToken);
await next();
);
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllerRoute(
name: "default",
pattern: "controller=Home/action=Index/id?");
endpoints.MapRazorPages();
);
// AuthenticationController
public class AuthenticationController : Controller
...
[HttpPost]
public async Task Login([Bind("Id, UserName, Password, EmailAddress")]UserLoginDetails login)
...
// Successful user authentication - now time to route to Home Index Razor Page
HttpContext.Session.SetString("JWToken", token);
return RedirectToPage("/Index", new area = "HomePages" );
...
namespace PilotApp.Areas.HomePages.Pages
[Authorize]
public class IndexModel : PageModel
...
RedirectToPage 函数会导致 HTTP 401“此页面不工作”错误。请注意,如果我删除 [Authorize] 属性,此路由将起作用。那么,为什么基于 JWT 的授权在 2.2 中工作的 ASP.NET 3.1 中不起作用?
感谢您的帮助!
【问题讨论】:
【参考方案1】:试试return RedirectToAction("Index", "HomePages");
【讨论】:
恐怕没有乐趣。这是对 Razor Page 的调用,所以 RedirectToPage 可能没问题。【参考方案2】:ASP.NET 3.1 似乎需要以下 cookie 设置以确保 JWT 授权正常工作:
public void ConfigureServices(IServiceCollection services)
services.AddSession(options =>
options.Cookie.IsEssential = true;
);
...
这解决了我的 ASP.NET 3.1 迁移问题 :-)
【讨论】:
以上是关于迁移到 ASP.NET 3.1 - 从登录控制器路由到 Razor 页面主页索引页面不再工作的主要内容,如果未能解决你的问题,请参考以下文章
Asp.net Core 3.1-如何从控制器返回到 Razor 页面?
将 [Authorize] 添加到控制器无法重定向到身份登录路由。 ASP.NET 核心 3.1 MVC
从 MVC 迁移到 ASP.NET Core 3.1 中的端点路由时,具有角色的 AuthorizeAttribute 不起作用
将 Asp.Net Core 2.2 App 迁移到 3.1 时的整数序列化 [关闭]
使用 ADFS 的 JWT Bearer 身份验证将 ASP.NET Framework 迁移到 ASP.NET Core 3.1