【发布时间】:2020-08-09 13:58:46
【问题描述】:
我有使用剃须刀页面的 ASP .NET Core 3.1 网站,但也有从 ASP .NET Core Controller 类继承的单个控制器。控制器处理有效负载,然后在成功时重定向到剃刀页面之一。我注意到当控制器中存在未处理的异常时,浏览器会显示 HTTP 400 - Bad Request 错误,但我希望控制器简单地使用我已经定义的异常处理程序,如下所示:
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
else
app.UseExceptionHandler("/Error");
在上面,“/Error”路径是剃须刀页面。在非开发模式下,控制器不使用我的异常处理程序,只显示 HTTP 400 - Bad Request browser 错误。
我设法让它与异常过滤器类一起使用,在 OnException() 方法中,我记录了错误并手动重定向到“/Error”页面。异常过滤器如下所示:
private class CustomExceptionFilter : IExceptionFilter
{
private readonly IWebHostEnvironment hostingEnvironment;
private readonly ILogger<CustomExceptionFilter> logger;
public CustomExceptionFilter(IWebHostEnvironment hostingEnvironment, ILogger<CustomExceptionFilter> logger)
{
this.hostingEnvironment = hostingEnvironment;
this.logger = logger;
}
public void OnException(ExceptionContext context)
{
if (this.hostingEnvironment.IsDevelopment())
{
return;
}
this.logger.LogError(context.Exception, string.Empty);
context.Result = new RedirectToPageResult("/Error");
}
然后,我在控制器本身上定义了 [TypeFilter(typeof(CustomExceptionFilter))]。一切似乎都在工作,但似乎有很多活动部件。这是唯一的方法还是我错过了什么?
这是启动代码:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseForwardedHeaders();
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts(options => options.MaxAge(365).IncludeSubdomains());
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseXRobotsTag(options => options.NoIndex().NoFollow());
app.UseXfo(options => options.SameOrigin());
app.UseXXssProtection(options => options.EnabledWithBlockMode());
app.UseXContentTypeOptions();
app.UseNoCacheHttpHeaders();
app.UseRedirectValidation();
app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapRazorPages();
});
}
提前致谢!
【问题讨论】:
-
您的 web.config 或 Startup.cs(或类似)文件中是否有任何内容可能会干扰您的代码?
-
我找不到任何不寻常的地方。请参阅我的帖子中的启动代码。
标签: c# asp.net-core razor-pages