根据REST哲学,PUT操作应该创建一个实体(如果不存在),或者更新它(如果存在)。因此,例如,如果客户端执行此操作:

PUT http://server/user/5?firstname=John&lastname=Doe


我应该期望创建或更新ID为5的用户。

使用NHibernate可以很容易地进行更新。只需检索用户并更新名字和姓氏即可。

但是,如何创建ID为5的用户?默认情况下,NHibernate管理所有实体ID。即使您自己设置ID,NHibernate也会忽略它并用它自己的ID代替。如果我切换为使用分配的ID,则可以分配ID为5的新用户,但那样我会失去很多NHibernate的功能。

因此,换句话说,是否有一种方法可以将NHibernate配置为如果未提供则使用生成的ID,而如果提供了ID,则使用用户设置的ID?如果没有,如何解决NHibernate创建PUT的问题?

最佳答案

如果你做一个

PUT http://server/user/5


服务器创建了对象,但是nHibernate更改了ID,然后返回HTTP状态代码301 - Moved permanently并将新的URI放入Location标头中。

客户端应检测到301,并使用旧ID更新所有存储的URL。

只是警告一下,PUT语义并不是真正的Create和Update,而是被替换。因此,如果您发送的表述仅包含姓氏和名字,那么如果您按书来做事情,那么先前存储的有关该用户的所有其他信息都将丢失。

07-24 18:35
查看更多