我遇到了同样的障碍,想控制我的 400 Bad Request 输出格式,但又不想弄脏序列化ModelState. 我会使用密封的(但谢天谢地是公开的)SerializableError类。
var errorDetails = new SerializableError(ModelState);
var errorResponse = new YourCustomResponseType
{
ModelValidationErrors = errorDetails,
LogMessages = new []
{
new LogMessage("Error", "Invalid model - see modelValidationErrors for detail")
}
};
return BadRequest(errorResponse);
哪里YourCustomResponseType可能看起来像这样:
public class YourCustomResponseType
{
public LogMessage[] LogMessages { get; set; }
public Dictionary<string, object> ModelValidationErrors { get; set; }
}
SerializableError是Dictionary<string, object>这样的,所以效果很好。您的回复可能如下所示:
{
"logMessages": [
{
"category": "Error",
"message": "Invalid model - see modelValidationErrors for detail"
}
],
"modelValidationErrors": {
"aSettingsType.someEnumField": [
"The input was not valid."
]
}
}