[英]ASP.NET MVC/Web API model binding item to collection
我將Web API用作ExtJS數據存儲的入口點,該數據庫在批處理模式下啟用了自動同步。 這意味着,可以僅用1個項或一組項來調用我定義的Web API方法,如下所述。
僅有1件的情況:
{
"Category":"fsf",
"Importance":10,
"TaskNo":5467,
"Id":"UnplannedTask-6",
"StartDate":"2015-09-21T03:00:00+02:00",
"EndDate":"2015-09-21T05:00:00+02:00",
"Cls":"",
"Name":"",
"ResourceId":"18"
}
有多個物品的情況:
[
{
"Category":"haer",
"Importance":10,
"TaskNo":5,
"Id":"UnplannedTask-5",
"StartDate":"2015-09-21T04:00:00+02:00",
"EndDate":"2015-09-21T06:00:00+02:00",
"Cls":"",
"Name":"",
"ResourceId":"14"
},
{
"Category":"fsf",
"Importance":10,
"TaskNo":5467,
"Id":"UnplannedTask-6",
"StartDate":"2015-09-21T03:00:00+02:00",
"EndDate":"2015-09-21T05:00:00+02:00",
"Cls":"",
"Name":"",
"ResourceId":"18"
}
]
因為我注意到重載有些棘手(也許是不可能的),所以這給我的Web API帶來了一些問題。
這是接受項目列表的Web API操作:
[HttpPost]
public async Task<dynamic> Update(IEnumerable<Appointment> appointments)
{
...
}
在這種情況下,它再次只接受一個:
[HttpPost]
public async Task<dynamic> Update(Appointment appointment)
{
...
}
現在,這兩個動作都可以單獨工作。 當只有一項返回時,模型綁定是正確的。 清單發回時的情況與此相同。 到現在為止還挺好。 但是,不可能知道是通過導線發送1項還是10項。 因此,我必須能夠同時支持這兩個動作,但是重載無法以我所經歷的這種方式工作-這意味着我一次只能使用一個動作。
因此,我希望找到一種解決方案,其中可以使用模型綁定將1個項目的綁定轉換為項目的集合,以便只能使用1個接受項目列表的操作。 這可能嗎?有沒有可用的示例(和節省時間的工具)?
感謝Peter Kellner,我已經研究了這個問題,並且ExtJS的數據存儲編寫器config中似乎有一個配置設置可以啟用我的請求:
proxy: {
headers: { 'Accept': 'application/json' },
type: 'ajax',
api: {
create: '/api/Appointments/Add',
update: '/api/Appointments/Update',
destroy: '/api/Appointments/Destroy'
},
reader: {
type: 'json'
},
writer: {
type: 'json',
writeAllFields: true,
allowSingle: false <------------------ That did the trick
}
},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.