Миграция на ASP. NET 3.1 - маршрутизация от Контроллера входа в Razor Page Домашняя страница индекса больше не работает - PullRequest
1 голос
/ 27 января 2020

Я обновил свое приложение с 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 не работает в ASP. NET 3.1, которая работала в 2.2?

Благодарен за любую помощь!

Ответы [ 2 ]

0 голосов
/ 02 февраля 2020

ASP. NET 3.1, кажется, требуется следующая настройка cook ie для обеспечения правильной работы авторизации JWT:

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSession(options =>
        {       
            options.Cookie.IsEssential = true;
        });
        ...
    }

Это исправило мою ASP. NET 3.1 вопрос миграции: -)

0 голосов
/ 28 января 2020

Попробуйте return RedirectToAction("Index", "HomePages");

...