【发布时间】:2022-01-07 10:26:36
【问题描述】:
在我们的一个项目 (.NET 5) 中,Razor 页面路由的行为有点奇怪。中间件管道没有什么特别之处:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseMigrationsEndPoint();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); });
}
甚至服务也不包含任何额外内容:
public void ConfigureServices(IServiceCollection services)
{
string connectionString = Configuration.GetConnectionString("DefaultConnection");
// for scoped services (mainly for identity)
services.AddDbContext<DbEntities>(options =>
options.UseSqlServer(connectionString));
AddIdentity(services);
services.AddDatabaseDeveloperPageExceptionFilter();
services.AddRazorPages()
.AddRazorRuntimeCompilation();
}
private void AddIdentity(IServiceCollection services)
{
services.AddDefaultIdentity<ApplicationUser>(options =>
{
options.SignIn.RequireConfirmedAccount = true;
options.User.RequireUniqueEmail = true;
options.Password.RequiredLength = 6;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireDigit = false;
options.Password.RequireLowercase = false;
options.Password.RequireUppercase = false;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
})
.AddRoles<IdentityRole>()
.AddEntityFrameworkStores<DbEntities>();
// this is needed because passwords are stored with old hashes
services.Configure<PasswordHasherOptions>(options =>
options.CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV2
);
}
我们已经搭建了一些身份 RazorPages:
当我们在public async Task OnGetAsync(string? returnUrl = null) 和ProjectRoot/Areas/Identity/Pages/Account/Login.cshtml.cs 中设置断点并运行项目时,会发生奇怪的事情。
每当我们想在浏览器中访问https://localhost:5001/ 时,就会触发Login.cshtml.cs 中的断点。甚至在ProjectRoot/Pages/Index.cshtml.cs之前。
我们怎样才能找到它为什么会这样?为什么应用程序在Index.cshtml.cs 之前路由到Login.cshtml.cs?
在登录断点调试时,上下文值为:
Request.Path = "/"
Request.RouteValues = { ["page"] = "/Index" }
【问题讨论】:
-
我认为你每次都被重定向到登录,因为你没有登录。
-
@PoulBak 你是天才。而已!我的同事将此行(以及其他行)添加到
@model HlidacStatu.JobsWeb.Areas.Identity.Pages.Account.LoginModel到Index.cshtml。您可以将其发布为答案,以便我将其标记为正确答案吗?谢谢
标签: c# asp.net-core razor-pages