我正在尝试处理与引发的异常和返回的 HTTP 状态代码有关的错误。我想两者兼得。
这是我当前在我的
Program.cs
文件中的内容:
var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
services.AddControllersWithViews();
services.AddAuthentication(NegotiateDefaults.AuthenticationScheme)
.AddNegotiate();
services.AddAuthorization(options =>
{
options.FallbackPolicy = options.DefaultPolicy;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
app.UseExceptionHandler("/Home/Error");
app.UseStatusCodePagesWithReExecute("/Home/Error", "?statusCode={0}");
app.UseStaticFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.AddGenericBookingSystemEndpoints();
});
app.Run();
我收到错误,不知道为什么,我认为这可能是由于我的“应用程序”项目的顺序造成的,我不知道如何重新排序以使其正常工作。主页无法加载,它只是返回 500 错误,内容如下:
InvalidOperationException: Attempting to use an incomplete authentication context.
Microsoft.AspNetCore.Authentication.Negotiate.NegotiateHandler.HandleAuthenticateAsync()
我不知道如何重新排列项目的顺序,请有人帮忙吗?
我目前使用的是最新版本的
Visual Studio 2022
和.NET
。
我能够通过以下设置解决问题:
app.UseAuthentication();
app.UseStatusCodePagesWithReExecute("/Home/Error", "?statusCode={0}");
app.UseExceptionHandler("/Home/Error");
app.UseAuthorization();
当使用最小托管模型(WebApplication.CreateBuilder(args))时,您不需要显式编写 app.UseAuthentication() 。它被隐式地称为第一个中间件(参见this)。所以,只需删除该行即可。