2013-03-05 3 views
2

Я использую 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 с добытчиками/сеттеры, которые все строки.

ответ

3

Конечная точка с запятой в типе содержимого недействительна. Попробуйте отправить:

Content-Type: application/xml 

вместо этого.

HTTP-спецификация определяет тип носителя, как:

media-type  = type "/" subtype *(";" parameter) 

так должно быть только точка с запятой перед параметром типа носителя

+0

Как ни странно, я добавил его ',' так вызов будет пройти, но это было ошибкой. Когда я удаляю его, я получаю следующую ошибку: «Нет MediaTypeFormatter доступен для чтения объекта типа« MyMethodDTO »из контента с типом носителя« application/xml ». Я обновил OP с помощью сигнатуры метода. – atconway

+0

Выяснил это - я использовал XMLSerializer, зарегистрированный в Global.asax, в отличие от DataContractSerializer. Когда я удалил регистрацию с использованием XMLSerializer и вернулся к DataContractSerializer вместе с удалением ';' из 'Content-type', как вы упомянули, он сработал. Я могу задать новый вопрос, но если вы не возражаете, почему я не могу использовать XMLSerializer с XML в Post? – atconway

+1

Проверьте свойство ModelState на контроллере на предмет ошибок десериализации. Вероятно, при десериализации с помощью XmlSerializer что-то пошло не так. –