UseExceptionHandler被忽略了
本文关键字:被忽略了 UseExceptionHandler | 更新日期: 2023-09-27 18:12:01
这是我在Startup.cs中的Startup()方法:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
if (env.IsDevelopment())
{
loggerFactory.AddNLog();
}
app.UseApplicationInsightsRequestTelemetry(); // Needs to be first
app.UseExceptionHandler(errorApp =>
{
errorApp.Run(async context =>
{
context.Response.StatusCode = 500;
context.Response.ContentType = "application/json";
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null)
{
var ex = error.Error;
await context.Response.WriteAsync(new ErrorResponse
{
Code = 500,
Message = ex.Message
}.ToString(), Encoding.UTF8);
}
});
});
app.UseApplicationInsightsExceptionTelemetry(); // After error page
app.UseMvc();
}
这是我在控制器中的路由。
[HttpGet]
[Route("Test")]
public string Test()
{
if(!string.IsNullOrEmpty(Request.Query["test"]))
throw new Exception("Testing..");
return "Hello.";
}
ErrorResponse.cs
public class ErrorResponse
{
public int Code { get; set; }
public string Message { get; set; }
public override string ToString()
{
return JsonConvert.SerializeObject(this);
}
}
当我去http://website/test它显示"Hello.",但当我去http://website/test?test=asd它抛出我的异常(路由中的一个),而不是用UseExceptionHandler捕获它并停止程序。
我的目标是让它显示以下json代替:
{
"Error": 500,
"Message": "Testing..."
}
老帖子,但我刚刚遇到同样的问题。
可能有一些全局应用的异常过滤器。在Startup.ConfigureServices
中查找MVC配置。我有services.AddMvcOptions(o => o.Filters.Add<ErrorHandlerAttribute>())
,这是问题所在。
在我的情况下,app.UseDeveloperExceptionPage()
已经捕捉到异常,并以某种方式与此中间件发生冲突。
你的应用程序在异常情况下停止,因为你在VS中以调试模式运行它,并且附加了调试器。例如,从控制台运行app(或在VS.