迁移到 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

.net core 共享 .Net Forms Authentication cookie