代码之家  ›  专栏  ›  技术社区  ›  Ronan Thibaudau

切换到.net core 3终结点路由后,标识UI不再工作

  •  1
  • Ronan Thibaudau  · 技术社区  · 5 年前

    在用端点路由很难让我的区域显示出来之后,我成功地在这个自应答线程中修复了它(尽管不是以一种非常令人满意的方式): Issue after migrating from 2.2 to 3.0, default works but can't access area, is there anyway to debug the endpoint resolution?

    我似乎也没有做什么不同于默认项目和身份工程,即使我添加了一个路线,因为我在我的黑客。

    由于问题常常隐藏在行中,而不是它,我张贴我的整个启动文件。

    常规(默认)控制器工作。 管理区工作(其中一个页面没有身份验证,我可以访问它) 任何其他管理区域页面将我重定向到/Identity/Account/Login?ReturnUrl=%2Back(预期行为),但该页以及我测试的任何其他/Identity页为空,在debug中运行并附加调试器时没有错误。

    非常感谢您的帮助,以下是完整的启动程序:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Threading.Tasks;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Identity;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Http;
    using Microsoft.AspNetCore.HttpsPolicy;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using FranceMontgolfieres.Models;
    using Microsoft.AspNetCore.Mvc.Infrastructure;
    using Microsoft.Extensions.Hosting;
    using Microsoft.AspNetCore.Diagnostics.HealthChecks;
    
    namespace FranceMontgolfieres
    {
        public class Startup
        {
            public Startup(IConfiguration configuration)
            {
                Configuration = configuration;
            }
    
            public IConfiguration Configuration { get; }
    
            // This method gets called by the runtime. Use this method to add services to the container.
            public void ConfigureServices(IServiceCollection services)
            {
                services.AddSingleton<IConfiguration>(Configuration);
    
                services
                    .Configure<CookiePolicyOptions>(options =>
                    {
                        // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                        options.CheckConsentNeeded = context => true;
                        options.MinimumSameSitePolicy = SameSiteMode.None;
                    });
    
                services
                    .AddDbContext<FMContext>(options => options
                        .UseLazyLoadingProxies(true)
                        .UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
    
                services
                    .AddDefaultIdentity<IdentityUser>()
                    .AddRoles<IdentityRole>()
                    .AddEntityFrameworkStores<FMContext>();
    
                services
                    .AddMemoryCache();
    
                services.AddDistributedSqlServerCache(options =>
                {
                    options.ConnectionString = Configuration.GetConnectionString("SessionConnection");
                    options.SchemaName = "dbo";
                    options.TableName = "SessionCache";
                });
    
                services.AddHttpContextAccessor();
    
                services
                    .AddSession(options => options.IdleTimeout = TimeSpan.FromMinutes(30));
    
                services.AddControllersWithViews();
                services.AddRazorPages();
            }
    
            // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
            public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            {
                if (env.IsDevelopment())
                {
                    app.UseDeveloperExceptionPage();
                    app.UseDatabaseErrorPage();
                }
                else
                {
                    app.UseExceptionHandler("/Home/Error");
                    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                    app.UseHsts();
                }
    
                app.UseHttpsRedirection();
                app.UseRouting();
                app.UseStaticFiles();
                app.UseCookiePolicy();
                app.UseAuthentication();
                app.UseAuthorization();
                app.UseSession(); 
    
                app.UseEndpoints(endpoints =>
                {
                    endpoints.MapAreaControllerRoute("Back", "Back", "back/{controller=Home}/{action=Index}/{id?}");
                    endpoints.MapControllerRoute("default","{controller=Home}/{action=Index}/{id?}");
                });
            }
    
            private async Task CreateRoles(IServiceProvider serviceProvider)
            {
                //initializing custom roles 
                var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
                string[] roleNames = { "Admin", "Manager", "Member" };
                IdentityResult roleResult;
    
                foreach (var roleName in roleNames)
                {
                    roleResult = await RoleManager.CreateAsync(new IdentityRole(roleName));
                }
            }
        }
    }
    
    1 回复  |  直到 4 年前
        1
  •  12
  •   Kirk Larkin    5 年前

    MapRazorPages 在你的 UseEndpoints 回拨:

    app.UseEndpoints(endpoints =>
    {
        // ...
        endpoints.MapRazorPages();
    });