1

次のシナリオで、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 を解析できません..."

4

0 に答える 0