ASP.NET Core更改默认ApiController BadResponse



我正在使用ASP。NET Core 5.0和我有一个带有Register方法的UsersController,它接收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)
{
}
}

这是我在UsersController中的Register方法的一部分。

[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验证的默认响应?

您可以使用"ApiBehaviourOptions。SuppressModelStateInvalidFilter";属性:

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

因此,一个非常基本的用法示例如下(Startup.cs中的ConfigureServices方法(:

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

最新更新