有人可以解释为什么在以下场景中“ONEController”返回 XML 而“TWOController”在从 ExtJs 以相同方式请求时返回 JSON?
MVC Web API 代码:
public class ONEController : ApiController
{
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
}
public class TWOController : ApiController
{
public thing<string> Get()
{
return new thing<string>(new string[] { "value1", "value2" });
}
}
[System.Runtime.Serialization.DataContract]
public class thing<T>
{
public thing(IEnumerable<T> stuff)
{
Id = 42;
data = stuff;
}
[System.Runtime.Serialization.DataMember]
public int Id { get; set; }
[System.Runtime.Serialization.DataMember]
public IEnumerable<T> data { get; set; }
}
ExtJs 控制器:
Ext.define('EPSS.controller.Things', {
extend: 'Ext.app.Controller',
views: [
'Thing.Index'
],
stores: [
'ONEs',
'TWOs'
],
init: function () {
console.log('controller init');
this.control({
'container > ThingIndex': {
render: this.onPanelRendered
}
});
},
onPanelRendered: function () {
console.log('index rendered');
this.getONEsStore().load();
this.getTWOsStore().load();
}
});
模型和商店看起来像这样(非常简单):
Ext.define('EPSS.store.ONEs', {
extend: 'Ext.data.Store',
model: 'EPSS.model.ONE'
});
Ext.define('EPSS.model.ONE', {
extend: 'Ext.data.Model',
fields: [
'Id',
'Details'
],
idProperty: 'Id',
proxy: {
type: 'rest',
url: '/api/ONE',
reader: {
type: 'json'
}
}
});
我还不需要对这个示例数据做任何事情......我只是设置了一个简单的 ExtJs 索引视图,从 Home Index.cshtml 调用 ExtJs 应用程序,控制器在渲染时触发存储。在 firebug 控制台中,“TWO”将呈现一些不错的 JSON,而“ONE”将响应 XML 和未捕获的异常:“无法解析服务器返回的 JSON...”