0

想象一个带有各种搜索参数(例如姓氏、出生日期)的搜索页面。我们使用了基于 GET 的表单,并且一切正常 - 直到现在。

上周我们将全球化引入到我们的应用程序中,并在各个领域遇到了问题。HTTP-GET 请求仍然没有副作用,但是,不再是幂等的——如果用户在不同的文化下运行,则排序规则会发生变化并返回一组不同的匹配人员。

Q1)那么使用 GET 方法仍然是一个好主意吗?

这种全球化意识也被“记录”在 ASP.NET MVC 值绑定器中:QueryStringValueProvider使用CultureInfo.InvariantCulture. 这为所有非 UI 客户端提供了一个定义良好的 API。

不考虑问题 1,我们将这些表单转换为基于 POST 的表单。ASP.NET MVCFormValueProvider使用CultureInfo.CurrentCulture和模型绑定重新开始工作 - 没有修改我们从 ASP.NET MVC 检索模型绑定错误。

当然,我们现在面临的问题是,用户在搜索后无法单击浏览器的后退按钮,而不会检索到恼人的“您确定要再次发布此数据”警告。

Q2)有没有办法告诉浏览器对于一个页面可以再次发布它?

如果这不可能,我们需要改回基于 GET 的表单,但是,我们的 URL API 不再是幂等的......我也不喜欢这点 - 并且需要我深入研究 ASP.NET MVC 模型绑定基础设施以使用具有文化意识的价值提供者...

4

1 回答 1

0

如果请求没有副作用,则根据定义它是幂等的。

您似乎将幂等性与“总是返回相同的东西”混淆了。

于 2013-09-17T15:41:20.323 回答