当前位置: 首页 > 知识库问答 >
问题:

Asp。Net 5/核心应用程序。UseExceptionHandler()不工作

利俊迈
2023-03-14

我刚起步

(更新:解决方案是将UseRouting移动到/api/error路由下)

app.UseRouting();

if (env.IsDevelopment()) {               
    app.UseExceptionHandler("/api/error/error-local-development"); 
    SwaggerConfig.Configure(app);              
}
else {             
    app.UseExceptionHandler("/api/error/error");
}

 app.UseCors();
 app.UseHttpsRedirection();
 app.UseDefaultFiles();
 app.UseSpaStaticFiles(); 
 app.UseAuthentication();
 app.UseAuthorization();
 app.UseRequestLocalization(options);
  app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllers();
                endpoints.MapHub<ResultHub>("/hubs/resultHub");
            });


            app.UseSpa(spa =>
            {
                spa.Options.SourcePath = "wwwroot";
            });

但是当在控制器操作中抛出new Exception()时,永远不会调用错误控制器方法

[Route("api/error")]
[ApiController]
[ApiExplorerSettings(IgnoreApi = true)]
public class ErrorController : OwnBaseController
{
    public ErrorController(IApplicationUserService applicationUserService, ILogger<ErrorController> logger, IDiagnosticContext diagnosticContext) : base(applicationUserService, logger, diagnosticContext)
    {
    }

    [Route("error")]
    public IActionResult Error()
    {
        return Problem(); 
    }

    [Route("error-local-development")]
    public IActionResult ErrorLocalDevelopment([FromServices] IWebHostEnvironment webHostEnvironment)
    {
       var context = HttpContext.Features.Get<IExceptionHandlerFeature>();
       return Problem(
            detail: context.Error.StackTrace,
            title: context.Error.Message);
    }
}

共有1个答案

公西苗宣
2023-03-14

这可能看起来很奇怪,但订购很重要。

UseExceptionHandler和UseRouting都在后台注册中间件。

首先注册的将是最外部的中间件。因此,如果内部抛出异常,外部可以捕获它并可以处理(和/或记录)它。

MSDN对此有一些警告,例如:

  • 处理ASP. NET Core的UseStatusCodePagesSusReExecute部分中的错误

如果指定了应用程序中的endpoint,请为endpoint创建MVC视图或Razor页面。确保UseStatusCodePagesAuthReExecute放在UseRouting之前,以便可以将请求重新路由到状态页面。

  • ASP。NET Core中间件的中间件订单部分

UseExceptionHandler是第一个添加到管道中的中间件组件。因此,异常处理程序中间件会捕获以后调用中发生的任何异常。

 类似资料:
  • 在Asp。Net Core 3.1应用程序我有以下关于应用程序设置的部分: 我试图获取一些值,比如Facebook的Id,所以我尝试: 但这行不通。。。我怎样才能得到这些值?

  • 我想为新用户设置一封确认电子邮件。 所以当调试时,单击链接时,userId是可以的,但“code”输入参数为空,所以 是真的,然后执行 发送给注册用户的电子邮件如下所示: 请单击此链接确认您的帐户:https://localhost:44314/Account/ConfirmEmail?userId=3ec7ac6a-3329-4821-a09b-aa4843598eaa 编辑:链接包含 实际上,

  • 我们正在开发具有移动部分和网络用户界面的应用程序。Web UI使用角,我们在后端配置cors时遇到了问题。我们的代码如下(只是对我们的问题很重要的代码): 从stackoverflow上的文档和其他帖子来看,这应该是可行的,但不是。我们错过了什么? thnx 编辑: 这是邮递员的请求: 卷曲'https://guw.azurewebsites.net/api/token'-X OPTIONS-H'

  • 本部分包含适用于 ASP 应用程序的主题。 其中包括: 关于 ASP 应用程序:解释什么是 ASP 应用程序。 管理应用程序:解释如何启动和停止应用程序并介绍部分应用程序管理服务。 管理会话:解释如何保存用户信息。 维护 ASP 应用程序的安全:解释如何通过验证用户标识和控制对应用程序中的文件的访问来维护应用程序的安全。 创建事务性脚本:解释如何在事务环境中运行脚本。 使用多语言站点:解释如何为应

  • 当从查询字符串提取的模型将字典作为其属性之一时,Swagger生成错误的URL。如何告诉Swagger更改URL中字典的格式或手动定义输入参数模式,而不自动生成?试图使用Swashbuck和NSwag。 控制器 输入模型-查询字符串 Swagger UI为查询模型的“条件”属性显示了这种格式 Swagger生成的URL-Open API v2-将不会绑定到“条件” Swagger生成的URL-Op

  • 我的webapp是用。NET核心并部署在Azure中。我已启用Azure应用程序服务身份验证,并将其配置为使用Azure Active Directory。当我访问webapp时,我确实会被重定向到正确的登录页面。登录后,我可以浏览到endpoint。对我进行身份验证,并查看是否存在针对我的用户的声明。我还可以验证下面的请求标头是否存在值: X-MS-TOKEN-AAD-ID-TOKEN X-MS