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

如何向InvalidModelStateResponseFactory委托注入依赖?

在InvalidModelStateResponseFactory中使用Scoped错误处理服务

你可以通过ActionContext的HttpContext.RequestServices获取当前请求的ScopedIErrorHandlingService实例——这个服务提供者和当前请求绑定,能正确拿到对应Scoped生命周期的实例。

首先确保你已经把错误处理服务注册为Scoped:

services.AddScoped<IErrorHandlingService, ErrorHandlingService>();

然后修改ApiBehaviorOptions的配置代码:

services.Configure<ApiBehaviorOptions>(options =>
{
    options.InvalidModelStateResponseFactory = (actionContext) =>
    {
        // 从当前请求的服务容器中获取Scoped的错误处理服务
        var errHandler = actionContext.HttpContext.RequestServices
            .GetRequiredService<IErrorHandlingService>();

        // 遍历ModelState中的所有错误并添加到服务中
        foreach (var keyValuePair in actionContext.ModelState)
        {
            var modelErrors = keyValuePair.Value.Errors;
            if (modelErrors.Count == 0) continue;

            foreach (var modelError in modelErrors)
            {
                errHandler.AddError(new MyCustomError()
                {
                    // 根据需求填充错误信息,例如:
                    Message = modelError.ErrorMessage,
                    Field = keyValuePair.Key
                });
            }
        }

        // 返回统一格式的错误响应
        return new BadRequestObjectResult(errHandler.ErrorResponse);
    };
});

关键说明

  • HttpContext.RequestServices是当前请求的服务提供者,专门用于获取和请求同生命周期的服务(Scoped或Transient),正好匹配你的IErrorHandlingService的Scoped生命周期。
  • 这样处理后,模型绑定错误会被统一收集到错误处理服务中,既保持所有错误响应格式一致,也能和业务代码中添加的错误合并返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:27:08