【问题标题】:Impossible to reach HomeController routes with enabled UseAuthentication启用 UseAuthentication 无法到达 HomeController 路由
【发布时间】:2019-04-03 18:02:44
【问题描述】:

正如标题所说,我想在 .NET Core 2.1 中实现某种授权,但我无法按照他们的教程进行操作。我已经设置了 Startup.cs 文件

public void ConfigureServices(IServiceCollection services)
    {

        string connection = Configuration.GetConnectionString("DefaultConnection");
        if (_currentEnvironment.IsDevelopment())
            services.AddDbContext<PagesContext>(options => options.UseSqlServer(connection), ServiceLifetime.Singleton);
        else
            services.AddDbContext<PagesContext>(options => options.UseMySql(connection), ServiceLifetime.Singleton);

        services.AddIdentity<User, IdentityRole>(opts=>
        {
            opts.Password.RequireDigit = false;
            opts.Password.RequiredLength = 8;
            opts.Password.RequireLowercase = false;
            opts.Password.RequireNonAlphanumeric = false;
            opts.Password.RequireUppercase = false;
            opts.User.AllowedUserNameCharacters = null;
        }).AddEntityFrameworkStores<PagesContext>()
        .AddDefaultTokenProviders();

        services.AddSingleton<IStringLocalizerFactory, EFStringLocalizerFactory>();
        services.AddMvc();

    }


    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseStatusCodePages();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
        }
        var supportedCultures = new[]
        {
            new CultureInfo("en-US"),
            new CultureInfo("en-GB"),
            new CultureInfo("en"),
            new CultureInfo("ru-RU"),
            new CultureInfo("ru"),
            new CultureInfo("uk-UA"),
            new CultureInfo("ua")
        };
        app.UseRequestLocalization(new RequestLocalizationOptions
        {
            DefaultRequestCulture = new RequestCulture("ru-RU"),
            SupportedCultures = supportedCultures,
            SupportedUICultures = supportedCultures
        });
        app.UseStaticFiles();
        app.UseAuthentication();
        app.UseMvc(
            routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            }
        );

我的 HomeController.cs 文件包含以下内容:

    [HttpGet]
    public async Task<IActionResult> Index()
    {

        var user = await _userManager.GetUserAsync(HttpContext.User);
        if (user != null)
        {
            if (await _userManager.IsInRoleAsync(user, "Admin"))
            {
                return LocalRedirectPermanent("/Admin/Index");
            }
            else if (await _userManager.IsInRoleAsync(user, "Carrier"))
            {
                return LocalRedirectPermanent("/Carrier/Index");
            }
            return LocalRedirectPermanent("/Passenger/Index");
        }
        Page indexPage = db.Page.Include(u => u.Title).Include(u => u.Description).FirstOrDefault(p => p.Tag == "main_page");
        return View();
    }

从我要检测的代码中可以看出,如果用户登录 - 显示相应的页面。如果不是 - 页面,它启用登录过程。但是,当使用身份验证时,默认路由会被忽略。如果我从 Visual Studio 启动它,它会将我导航到 /Account/AccessDenied?ReturnUrl=%2FPassenger%2FIndex ,而不是 /Home/Index。我怎样才能覆盖它?

【问题讨论】:

    标签: c# authentication asp.net-core .net-core asp.net-core-mvc


    【解决方案1】:

    我找到了。看来,这不是 .NET Core 的错。它基于标题。 在我的例子中,LocalRedirectPermanent("/Admin/Index") 被多次调用,因此,它自动调用了“/Admin/Index”,绕过了“/Home/Index”。我认为,这是由于this。因此,我以这种方式在浏览器(Firefox)中进行了修复:重置历史记录(表单、cookie 等)并在 Visual Studio Build->Rebuild Solution 中执行。它又开始工作了。希望,这对某人有所帮助

    【讨论】:

      猜你喜欢
      • 2020-05-30
      • 1970-01-01
      • 2014-03-14
      • 2018-04-13
      • 2018-02-24
      • 1970-01-01
      • 2019-07-22
      • 2021-09-06
      • 2021-03-20
      相关资源
      最近更新 更多