Я использую Fiddler, чтобы составить вызов моей службы веб-API. Звонок идет, и я отлаживаю его в контроллере. Однако Request.Content.Headers.ContentType
- null
. Однако, когда я осмотреть объект, я могу видеть Content-Type: application/xml;
, как показано ниже:Почему свойство ContentType в заголовке запроса Null?
?Request.Content.Headers
{Content-Length: 40039
Content-Type: application/xml;
}
base {System.Net.Http.Headers.HttpHeaders}: {Content-Length: 40039
Content-Type: application/xml;
}
Allow: {}
ContentDisposition: null
ContentEncoding: {}
ContentLanguage: {}
ContentLength: 40039
ContentLocation: null
ContentMD5: null
ContentRange: null
ContentType: null
Expires: null
LastModified: null
Что мне нужно сделать, чтобы быть в состоянии проверить значение ContentType
и его заполненным?
EDIT: Вот метод подписи для моего метода Post:
public HttpResponseMessage Post(MyMethodDTO message)
MyMethodDTO
только простой класс DTO с добытчиками/сеттеры, которые все строки.
Как ни странно, я добавил его ',' так вызов будет пройти, но это было ошибкой. Когда я удаляю его, я получаю следующую ошибку: «Нет MediaTypeFormatter доступен для чтения объекта типа« MyMethodDTO »из контента с типом носителя« application/xml ». Я обновил OP с помощью сигнатуры метода. – atconway
Выяснил это - я использовал XMLSerializer, зарегистрированный в Global.asax, в отличие от DataContractSerializer. Когда я удалил регистрацию с использованием XMLSerializer и вернулся к DataContractSerializer вместе с удалением ';' из 'Content-type', как вы упомянули, он сработал. Я могу задать новый вопрос, но если вы не возражаете, почему я не могу использовать XMLSerializer с XML в Post? – atconway
Проверьте свойство ModelState на контроллере на предмет ошибок десериализации. Вероятно, при десериализации с помощью XmlSerializer что-то пошло не так. –