次のシナリオで、ExtJs から同じ方法で要求されたときに「TWOController」が JSON を返すのに対し、次のシナリオで「ONEController」が XML を返す理由を説明してもらえますか?
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 を解析できません..."