c# - 启用 UseAuthentication 无法到达 HomeController 路由
问题描述
正如标题所说,我想在 .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。我怎样才能覆盖这个?
解决方案
我找到了。看来,这不是 .NET Core 的错。它基于标题。在我的例子中,LocalRedirectPermanent("/Admin/Index")
它被调用了多次,因此,它自动调用了“/Admin/Index”,绕过了“/Home/Index”。我想,是因为这个。因此,我以这种方式在浏览器(Firefox)中进行了修复:重置历史记录(表单、cookie 等)并在 Visual Studio Build->Rebuild Solution 中执行。它又开始工作了。希望,这对某人有所帮助
推荐阅读
- swift - Swift - tableView cellForRowAt 中的异步调用
- c# - 从另一个线程读取 ListView SelectedItems 集合
- python - 在 Python 中从 JSON API 中提取财务数据
- c++ - 为嵌套模板编写 C++17 样式“_v”帮助器模板的正确方法
- python - 为什么输出显示内存代码?
- java - 从 TreeMap 中消除重复条目
对象数组值 - java - 如何在不获取绑定异常的数组的情况下提供多个数组输入
- cookies - .ASPXAuth cookie 在登录后永远不会出现
- python-3.x - tkinter 滚动条旁边出现奇怪的白色条纹
- sql - 在给出财政年度和季度数字时计算开始日期和结束日期