想象一下包含各种搜索参数的搜索页面(例如姓氏,出生日期)。我们使用了基于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模型绑定基础结构以使用文化感知值提供程序...
答案 0 :(得分:0)
如果请求是无副作用的,那么根据定义它是同等效力的。
您似乎将幂等性与“总是返回相同的事物”混为一谈。