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 中 DateTime 解析的默认格式
更改 ASP.NET Core Razor 页面中的默认登录页面?
更改 Angular 和 ASP.NET Core 项目中的默认身份路由