HTTP,无副作用但不是幂等URL

时间:2013-09-17 14:44:37

标签: c# http asp.net-mvc-4 globalization culture

想象一下包含各种搜索参数的搜索页面(例如姓氏,出生日期)。我们使用了基于GET的表格,一切正常 - 直到现在。

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

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

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

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

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

Q2)有没有办法告诉浏览器,对于某个页面来说再次发布它是完全可以的?

如果这是不可能的,我们需要改回基于GET的表格,但是,我们的URL API不再是幂等的......我不喜欢的东西 - 并且要求我深入研究ASP。 NET MVC模型绑定基础结构以使用文化感知值提供程序...

1 个答案:

答案 0 :(得分:0)

如果请求是无副作用的,那么根据定义它是同等效力的。

您似乎将幂等性与“总是返回相同的事物”混为一谈。