Внедрить пользовательское сообщение проверки в конвейер фильтров.C#

Место общения программистов C#
Ответить
Anonymous
 Внедрить пользовательское сообщение проверки в конвейер фильтров.

Сообщение Anonymous »

У меня есть следующий класс, который используется веб-API

Код: Выделить всё

public class PostJobRequest
{
public int NumberOfThreads { get; set; }

public bool ReprocessSuccessful { get; set; } = true;

public bool ReprocessFailed { get; set; } = true;

public bool ProcessNew { get; set; } = true;
}
Следующий JSON отправляется в веб-API

Код: Выделить всё

{
"NumberOfThreads": 4,
"ReprocessSuccessful": 1,
"ReprocessFailed": 1,
"ProcessNew": 1
}
Как вы можете видеть, ReprocessSuccessful, ReprocessFailed и ProcessNew имеют логический тип, но JSON отправляется с числовыми типами.
Тогда платформа возвращает следующее сообщение об ошибке:

Код: Выделить всё

{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"request": [
"The request field is required."
],
"$.ReprocessSuccessful": [
"The JSON value could not be converted to System.Boolean. Path: $.ReprocessSuccessful | LineNumber: 2 | BytePositionInLine: 28."
]
},
"traceId": "00-00000000000000000000000000000000-0000000000000000-00"
}
Это ожидаемое поведение, но мне нужно вернуть JSON, который сообщает обо всех полях с недопустимыми значениями, а не только об одном из них. Примерно так:

Код: Выделить всё

{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"request": [
"The request field is required."
],
"$.ReprocessSuccessful": [
"The JSON value could not be converted to System.Boolean. Path: $.ReprocessSuccessful | LineNumber: 2 | BytePositionInLine: 28."
],
"$.ReprocessFailed": [
"The JSON value could not be converted to System.Boolean. Path: $.ReprocessFailed | LineNumber: 3 | BytePositionInLine: 24."
],
"$.ProcessNew": [
"The JSON value could not be converted to System.Boolean. Path: $.ProcessNew | LineNumber: 4 | BytePositionInLine: 19."
]
},
"traceId": "00-00000000000000000000000000000000-0000000000000000-00"
}
Как видите, в JSON есть три поля с ошибками проверки:

Код: Выделить всё

        "$.ReprocessSuccessful": [
"The JSON value could not be converted to System.Boolean. Path: $.ReprocessSuccessful | LineNumber: 2 | BytePositionInLine: 28."
],
"$.ReprocessFailed": [
"The JSON value could not be converted to System.Boolean. Path: $.ReprocessFailed | LineNumber: 3 | BytePositionInLine: 24."
],
"$.ProcessNew": [
"The JSON value could not be converted to System.Boolean. Path: $.ProcessNew | LineNumber: 4 | BytePositionInLine: 19."
]
Я подумывал о создании собственного фильтра для достижения этой цели, но метод OnActionExecuting получает только контекст с ошибкой в ​​поле ReprocessSuccessful, опуская другие поля:

Код: Выделить всё

public class CustomModelStateFilter : IActionFilter
{
public void OnActionExecuting(ActionExecutingContext context)
{
}
}
Знаете ли вы, есть ли способ изменить это поведение?

Подробнее здесь: https://stackoverflow.com/questions/792 ... of-filters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»