Я создаю спокойный веб-сервис с использованием .net и Newtonsoft для сериализации / десериализации.
Цель состоит в том, чтобы форсировать исключения (предпочтительно HTTP 400), когда обязательное свойство не включено в запрос.
Конфигурация сериализатора
config.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings {
MissingMemberHandling = MissingMemberHandling.Error,
Error = delegate (object x, ErrorEventArgs error) {
System.Diagnostics.Debug.WriteLine (error.ErrorContext.Error);
throw new Exception("");
}
};
Модель
[DataContract]
public class MyObject {
[JsonProperty(PropertyName = "id", Required = Required.Always)]
public string Id { get; set; }
}
Конечная точка отдыха
public IHttpActionResult MyAction([FromBody]MyObject request)
Тестирование:
Когда запрос запускается, поток выглядит следующим образом:
- Точка останова делегата ошибок достигает («1. Конфигурация сериализатора»), и я могу видеть журнал ошибок. Ошибка «проглочена», и выполнение продолжается в контроллере.
- Выполнение не выполняется в другой части веб-службы.
Следовательно ... я могу перехватитьошибка при использовании делегата, но не в состоянии его распространения (повторная установка делегата вообще не имеет значения).
Не справедливо ли ожидать этого, установив MissingMemberHandling. Ошибка ', я должен увидеть ошибку в моем контроллере?
Разве не справедливо ожидать, что, указав свойство как' required ', я действительно должен увидеть ошибку в моем контроллере?
Цель:
Вместо тихого сбоя, я хотел бы вызвать ошибку, когда происходит сбой десериализации тела HTTP.