You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用.NET 7原生ProblemDetails替换Hellang.ProblemDetailsOptions.Map()方法?

替换Hellang.ProblemDetails的Map方法为.NET 7原生实现

.NET 7原生ProblemDetails组件没有直接对应Map<TException>的API,但可以通过CustomizeProblemDetails结合异常处理特性实现等效功能,核心是从请求上下文提取异常实例,再针对性修改ProblemDetails内容。

具体实现步骤如下:

  1. 在配置ProblemDetailsOptions时,通过CustomizeProblemDetails回调获取异常信息
  2. 判断异常类型是否为目标类型(比如ArgumentNullException)
  3. 直接修改传入的ProblemDetails对象属性,覆盖默认值

对应你原来的代码,等效的原生实现如下:

builder.Services.AddProblemDetails(options =>
{
    options.CustomizeProblemDetails(context =>
    {
        // 从请求上下文获取异常处理特性,提取异常实例
        var exceptionFeature = context.HttpContext.Features.Get<IExceptionHandlerFeature>();
        if (exceptionFeature?.Error is ArgumentNullException ex)
        {
            // 修改ProblemDetails的属性,替换默认值
            context.ProblemDetails.Title = "Null exception";
            context.ProblemDetails.Detail = ex.Message;
            context.ProblemDetails.Status = StatusCodes.Status409Conflict;
            context.ProblemDetails.Instance = context.HttpContext.Request.Path;
        }
    });
});

关键说明:

  • 原生组件会先生成默认的ProblemDetails对象,你只需在CustomizeProblemDetails里根据异常类型修改需要自定义的字段即可,无需重新创建ProblemDetails实例
  • 必须确保项目已启用异常处理中间件(app.UseExceptionHandler()),否则IExceptionHandlerFeature无法获取到异常信息
  • 如果需要处理多种异常类型,可以在回调里添加多个if或switch分支,分别处理不同的异常类型

内容的提问来源于stack exchange,提问作者HelloWorld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:14:58