У меня есть простое веб-приложение ASP.Net Core 2.0, и я включил Аутентификацию Windows в свойстве проекта, включив Аутентификацию Windows и отключив анонимную аутентификацию.
Для авторизации на уровне приложений / Фильтрация на уровне группы безопасности ADУ меня есть следующий код в Startup.cs:
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.AddMvc();
services.AddAuthentication(IISDefaults.AuthenticationScheme);
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.RequireRole("Application - Administrator")
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseAuthentication();
//app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");
//app.UseStatusCodePagesWithReExecute("/Home/Error", "?statusCode={0}");
app.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
Для обработки кода состояния Http 403, когда неавторизованный пользователь пытается получить доступ к приложению, он будет перенаправлен на пользовательскую страницу ошибки.Итак, я попробовал следующие 3 подхода в методе Configure в Startup.cs:
app.UseStatusCodePagesWithRedirects("/Home/Error/{0}");
app.UseStatusCodePagesWithReExecute("/Home/Error", "?statusCode={0}");
app.UseStatusCodePagesWithReExecute("/Home/Error/{0}");
В HomeController я попробовал как метод Error по умолчанию
public IActionResult Error()
{
return View(new ErrorViewModel { RequestId = Activity.Current?.Id ?? HttpContext.TraceIdentifier });
}
, так и индивидуальный для обработки определенныхкод состояния:
public IActionResult Error(string errCode)
{
if (errCode == "500" || errCode == "404" || errCode == "403")
{
return View($"~/Views/Error/{errCode}.cshtml");
}
return View("~/Views/Shared/Error.cshtml");
}
И у меня есть простая страница ошибки 403.cshtml в папке / Views / Error /.
Но ни одна из них не работает, все отображают эту страницу:
Мне интересно, что я пропустил или забыл реализовать для отображения отформатированной страницы с ошибкой?
Заранее спасибо.