WCF 4.0 Rest Service настройка типа контента - PullRequest
4 голосов
/ 28 января 2011

Я только что закончил свою первую службу WCF 4.0 Rest и не понимаю, почему Content-Type возвращаемых данных меняется между вызовами службы через Fiddler и Firefox. Вот мой сервисный контракт:

[ServiceContract]
public interface IProjectService
{
    [OperationContract]
    [WebGet(UriTemplate = "project/{id}/json", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    ProjectDataContract GetProjectJson(string id);

    [OperationContract]
    [WebGet(UriTemplate = "project/{id}/xml", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
    ProjectDataContract GetProjectXml(string id);

    [OperationContract]
    [WebGet(UriTemplate = "userprojects/{userKey}/json", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Json)]
    List<ProjectDataContract> GetProjectsByUserJson(string userKey);

    [OperationContract]
    [WebGet(UriTemplate = "userprojects/{userKey}/xml", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml)]
    List<ProjectDataContract> GetProjectsByUserXml(string userKey);
}

Как видите, я устанавливаю формат ответа для каждой операции. Если запрос заканчивается на "/ json", я возвращаю данные json. Если запрос заканчивается на «/ xml», то возвращаются данные xml. По крайней мере, таковы мои намерения.

Когда я выполняю вызов http://localhost:5050/ProjectServiceLibrary/project/27/xml в Firefox, я вижу, что для типа содержимого установлено значение «text / html», тогда как тот же запрос, вызываемый в fiddler, показывает правильный тип содержимого «application / xml». ». То же самое происходит для вызова запроса с суффиксом "/ json" - "text / html" в firefox и "application / json" в fiddler.

Итак, почему это происходит? Которому я доверяю? Я скачал дополнение JSONView Firefox, но все выглядит как json. Он обрабатывает XML как JSON.

Я уверен, что упускаю что-то очевидное. Любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 28 января 2011

Это относится к заголовку Accept в запросе, отправленном клиентом.Заголовок Accept содержит приоритетный список типов MIME.Заголовки Accept определяются клиентом (Firefox, Fiddler) и сообщают серверу, какие типы контента он способен принимать.Сервер будет использовать наилучшее соответствие на основе приоритета и совместимости.

Заголовки Accept, сгенерированные FireFox, придают тексту / html более высокий приоритет - сообщая серверу отправлять текст / html, если это возможно.Вы, вероятно, обнаружите, что Fiddler делает наоборот, придавая application / xml более высокий приоритет - это объясняет то, что вы видите.

Более подробную информацию о заголовках запросов можно найти в блоге Kris Jordans .

...