c# - Asp.net Core UseExceptionHandler 不工作 POST 请求
问题描述
在我的 .Net Core 2.0 应用程序中,我实现了 UseExceptionHandler来全局处理异常。但重定向只适用于 GET 方法,而 POST 方法总是返回状态码: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);
}
}
如何解决?
解决方案
根据文档:
在 MVC 应用程序中,不要使用 HTTP 方法属性(例如 HttpGet)装饰错误处理程序操作方法。显式动词阻止某些请求到达方法。允许匿名访问该方法,以便未经身份验证的用户能够接收错误视图。
所以,你的错误可能在HttpGet
属性上。不要使用它,而是遵循文档:
[Route("")]
[AllowAnonymous]
public IActionResult Get()
{
....
}
推荐阅读
- javascript - 转换为对象并将属性添加到数组的对象
- android - 同步成功后,同步网关不删除文档,Android App 正在赶上文档
- tensorflow - 如何修改 Keras 层的权重?
- r - mlr:使用学习器作为过滤器
- c# - 单机游戏中的假多显示器全屏:表格不够大
- php - 没有 Eloquent 模型的左连接 Laravel
- amazon-web-services - 列出所有 api 网关部署的 boto 脚本
- node.js - 在 Godaddy 共享 Linux 主机上安装 Nodejs 时出错
- swift - 缩短 swiftUI 代码:编译器无法在合理的时间内对该表达式进行类型检查
- flutter - 如何在颤动中按用户进行特定搜索