【发布时间】:2012-07-31 17:52:57
【问题描述】:
场景:
User 类有几组属性:password、address、preference、roles。
我们需要不同的 Ajax 调用来更新 (1) 用户密码、(2) 用户配置文件、(3) 用户所在的角色。
所有教程和示例仅显示一个 POST 操作来更新整个 User 类。我的问题是我们如何才能只更新部分课程。
例如,在更新用户密码时,我们会:
- 显示一个文本框以从用户输入中收集新密码。
- 进行 Ajax 调用,仅将新密码与 userId(如:{id=3, newPassword=xxxxx})一起发布到 WebAPI POST 操作。
- 该操作只会更新用户的密码。
一种解决方案:(最容易想到的)
- 使用 userId 调用
GET操作以检索用户的所有数据 - 使用从 Web 用户输入中获得的值更新用户数据中的密码
- 使用更新的数据调用
POST操作,其中包含用户类中的所有属性。 -
POST操作将更新整个数据,而无需知道仅更改了密码。
好处:ApiController 只需要一个POST 操作。
缺点:我们要 Ajax 两次。
那么,我们有可能在一个ApiController 中拥有多个POST 操作吗?例如,PostPassword(userId, password)、PostProfile(userId, profile) 和 PostRoles(userId, roles)。
这样,我们只会调用PostPassword将密码发送到ApiController。在客户端,只有一个 Ajax 调用。它在我们将进行更新的服务器上。好处当然是减少了通过 Internet 传输的数据。
如果可能,将所有不同的POST 调用引导到ApiController 中的相应操作的正确方法是什么?
请帮助我们。谢谢大家。
【问题讨论】:
标签: ajax rest asp.net-mvc-4 asp.net-web-api