ASP .NET Core 更改默认 ApiController BadResponse

Posted

技术标签:

【中文标题】ASP .NET Core 更改默认 ApiController BadResponse【英文标题】:ASP .NET Core Change default ApiController BadResponse 【发布时间】:2021-07-20 20:38:01 【问题描述】:

我正在使用 ASP.NET Core 5.0,并且我有带有 Register 方法的用户控制器,它接收 UserRegisterInputModel。问题是我的 API 的所有响应都是特定格式的,但是 ApiController 会自动验证输入模型并以另一种格式返回 BadResponse。

这是我的抽象响应模型

    public abstract class ResponseModel
    
        public ResponseModel(bool successfull, int statusCode)
        
            this.Successfull = successfull;
            this.StatusCode = statusCode;
            this.ErrorMessages = new List<string>();
        

        public bool Successfull  get; set; 

        public int StatusCode  get; set; 

        public List<string> ErrorMessages  get; set; 

        public object Data  get; set; 
    

这是我的 BadResponseModel

    public class BadResponseModel : ResponseModel
    
        public BadResponseModel()
            : base(false, 400)
        
        
    

这是我在用户控制器中注册方法的一部分。

        [HttpPost]
        public async Task<IActionResult> Register(UserRegisterInputModel input)
        
            if (!ModelState.IsValid)
            
                return Json(new BadResponseModel()
                
                    ErrorMessages = new List<string>()
                    
                        "Invalid register information"
                    
                );
            

ApiController 功能会自动验证我的模型,并且永远不会到达 BadResponseModel 的返回语句。有什么方法可以停止自动验证或更改 ApiController 验证的默认响应?

【问题讨论】:

我认为这篇文章已经回答了你的问题。 check this out 您可以使用InvalidModelStateResponseFactory 生成自定义回复。检查以下链接:I need to return customized validation result (response) in validation attributes in ASP.Net core Web API 和 Handling validation responses for ASP.NET Core Web API。 【参考方案1】:

您可以使用“ApiBehaviourOptions.SuppressModelStateInvalidFilter”属性禁用自动模型状态验证:

https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.mvc.apibehavioroptions.suppressmodelstateinvalidfilter?view=aspnetcore-5.0

所以一个非常基本的用法示例是这样的(Startup.cs 中的 ConfigurationServices 方法):

        services.Configure<ApiBehaviorOptions>(opt =>  opt.SuppressModelStateInvalidFilter = true; );

【讨论】:

以上是关于ASP .NET Core 更改默认 ApiController BadResponse的主要内容,如果未能解决你的问题,请参考以下文章

在 Asp.Net Core 应用程序中更改默认页面

更改 ASP.NET Core 中 DateTime 解析的默认格式

更改 ASP.NET Core Razor 页面中的默认登录页面?

更改 Angular 和 ASP.NET Core 项目中的默认身份路由

如何更改 ASP.NET Core API 中的默认控制器和操作?

如何更改我的 .NET core 6 API 的默认端口号