場景:我可以爲ApiController提供多個POST操作嗎?
一個User
類具有幾組:password
,address
,preference
,roles
。
我們需要不同的Ajax調用來更新(1)用戶密碼,(2)用戶配置文件,(3)角色的用戶在不在。
所有的教程和例子只能說明一個POST操作以更新整個用戶類。我的問題是我們如何只更新班級的一部分。
例如,更新用戶密碼的時候,我們會:
- 顯示一個文本框來收集用戶輸入的新密碼。
- 創建一個Ajax調用,該調用僅將新密碼與userId一起發佈(如:{id = 3,newPassword = xxxxx})到WebAPI POST操作。
- 該操作只會更新用戶的密碼。
一個解決方案:(最容易想到的)
- 調用
GET
動作與用戶id檢索用戶 - 更新與值的用戶數據的密碼,所有數據從網絡用戶輸入獲得
- 使用更新的數據調用
POST
操作,該數據包含User類中的所有屬性。 - 那
POST
動作會更新整個數據而不知道密碼是否改變。
好處:只有一個POST
動作需要ApiController
。
缺點:我們要Ajax兩次。
那麼,我們可以在一個ApiController
中有多個POST
動作嗎?例如,PostPassword(userId, password)
,PostProfile(userId, profile)
和PostRoles(userId, roles)
。
這樣,我們只會撥打PostPassword
將密碼發送到ApiController
。在客戶端,只會有一個Ajax調用。它在服務器上,我們將進行更新。當然,通過互聯網傳輸的數據減少了。
如果可能,將所有不同的POST
調用指向ApiController
中相應的操作的正確方法是什麼?
請幫助我們。謝謝你們。
謝謝你的回覆。但可能不需要加載編輯表單的所有用戶數據。假設,如果需要更新他/她的密碼,則只會顯示一個文本框來接受輸入。具有uerId和新密碼的json將足以完成這項工作。那麼,我們如何才能發佈整個用戶數據的一部分並獲得部分更新呢? – Blaise 2012-08-02 18:22:30
隨着你的情況,你只需將密碼POST回服務器,User的其他屬性將爲空。更新數據庫的代碼檢查每個屬性是否爲空,所有屬性不爲null將被更新。 – 2012-08-03 03:56:23