我有问题。这里是简单的WCF restful服务,虽然我指定了ResponseFormat = WebMessageFormat.Json
,但他不想用JSON格式进行响应。他总是使用XMLformat响应:xmlns="http://schemas.datacontract.org/2004/07/GoalTracker.WcfRestService"
public class Global : HttpApplication
{
void Application_Start(object sender, EventArgs e)
{
Database.SetInitializer<GoalTrackerDb>(new GoalTrackerInitializer());
RegisterRoutes();
}
private void RegisterRoutes()
{
RouteTable.Routes.Add(new ServiceRoute("", new WebServiceHostFactory(), typeof(Service1)));
}
}
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(UriTemplate = "TestPatient",
ResponseFormat = WebMessageFormat.Json,
Method = "GET")]
List<Patient> GetCollection();
[OperationContract]
[WebInvoke(UriTemplate = "TestPatient/{id}",
ResponseFormat = WebMessageFormat.Json,
Method = "GET")]
TestPatient Get(string id);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
public class Service1 : IService1
{
GoalTrackerDb db = new GoalTrackerDb();
public List<Patient> GetCollection()
{
var result = db.Patients.ToList();
return result;
}
public TestPatient Get(string id)
{
TestPatient testpat = new TestPatient();
return testpat;
}
}
public class TestPatient
{
public long ID { get; set; }
public string Email { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public ICollection<TestGoal> Goals { get; set; }
public TestPatient()
{
ID = 0;
Email = "ads@mail.com";
FirstName = "janmbo";
LastName = "Ayo";
Goals = new Collection<TestGoal>();
Goals.Add(new TestGoal());
Goals.Add(new TestGoal());
}
}
public class TestGoal
{
public long ID { get; set; }
public string GoalName { get; set; }
public TestGoal()
{
ID = 2;
GoalName = "SomeGoalName";
}
}
答案 0 :(得分:0)
这很可能是因为误导WebHttpEndpoint.AutomaticFormatSelectionEnabled
属性:
启用自动格式选择后,WCF基础结构会解析请求消息的接受标头,并确定最合适的响应格式。如果Accept标头未指定合适的响应格式,则WCF基础结构使用请求消息的 Content-Type 或操作的默认响应格式。
因此,如果您使用Accept: application/xml
或类似服务来调用此服务,则WebMessageFormat.Json
将被默默忽略。您可以在system.serviceModel
部分中进行设置:
<standardEndpoints>
<webHttpEndpoint>
<standardEndpoint automaticFormatSelectionEnabled="false" />
</webHttpEndpoint>
</standardEndpoints>