Я только что создал свой первый сервис WCF REST. Я хотел, чтобы он возвращал JSON, поэтому я определил формат ответа. Сначала я был разочарован, потому что он все время возвращал SOAP, и я не знал почему, но я увидел, что блоггер использует Fiddler, поэтому я попытался с ним, а затем получил ответ JSON.
Я думаю, что причина в том, что Fiddler не отправляет этот заголовок HTTP:
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Но затем я попытался создать запрос, используя этот заголовок:
Accept: application/json,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Но это не сработало. Как WCF решает, когда использовать JSON или SOAP?
Есть ли способ заставить JSON всегда возвращаться?
Я хотел бы быть уверен, что при использовании сервиса он вернет JSON, а не SOAP.
Спасибо.
Обновление : пример кода:
[ServiceContract]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1
{
[WebGet(UriTemplate = "", ResponseFormat = WebMessageFormat.Json, RequestFormat= WebMessageFormat.Json)]
public List<SampleItem> GetCollection()
{
// TODO: Replace the current implementation to return a collection of SampleItem instances
return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
}
[WebInvoke(UriTemplate = "", Method = "POST")]
public SampleItem Create(SampleItem instance)
{
// TODO: Add the new instance of SampleItem to the collection
throw new NotImplementedException();
}
[WebGet(UriTemplate = "{id}", ResponseFormat = WebMessageFormat.Json)]
public SampleItem Get(string id)
{
// TODO: Return the instance of SampleItem with the given id
return new SampleItem() { Id = Int32.Parse(id), StringValue = "Hello" };
}
}