【发布时间】:2018-08-07 05:08:50
【问题描述】:
在我的 .Net Core 2.0 应用程序中,我实现了 UseExceptionHandler 来全局处理异常。但是重定向只适用于 GET 方法,而 POST 方法总是返回 Status Code: 404;未找到
这是我的 Startup.cs 配置方法
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory)
{
app.UseCors(builder => builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader()
.AllowCredentials());
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
if (env.IsDevelopment())
{
app.UseStatusCodePages();
app.UseDatabaseErrorPage();
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseExceptionHandler("/api/v1/Error");
}
else
{
app.UseExceptionHandler("/api/v1/Error");
}
app.UseMvc();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.RoutePrefix = "docs";
c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
c.SwaggerEndpoint("/[]virtualDir]/swagger/v1/swagger.json", "V1 Docs");
});
}
而错误控制器是
[Route("api/v1/[controller]")]
public class ErrorController : Controller
{
private readonly IErrorLoggerService _errorLoggerService;
public ErrorController(IErrorLoggerService errorLoggerService)
{
_errorLoggerService= errorLoggerService;
}
[HttpGet]
public IActionResult Get()
{
// Get the details of the exception that occurred
var exceptionFeature = HttpContext.Features.Get<IExceptionHandlerPathFeature>();
var errorLog = new ErrorLog();
if (exceptionFeature != null)
{
// Get which route the exception occurred at
var routeWhereExceptionOccurred = exceptionFeature.Path;
// Get the exception that occurred
var exceptionThatOccurred = exceptionFeature.Error;
// TODO: save exception in db
errorLog = new ErrorLog
{
Application = routeWhereExceptionOccurred,
Source = exceptionThatOccurred.Source,
CreatedDate = DateTime.Now,
Host = exceptionThatOccurred.InnerException?.ToString(),
Type = exceptionThatOccurred.Message,
Detail = exceptionThatOccurred.StackTrace
};
_errorLoggerService.Save(errorLog);
return Json(errorLog);
}
return Json(errorLog);
}
}
如何解决?
【问题讨论】:
标签: c# exception asp.net-core-mvc asp.net-core-2.0