2

我正在做我的第一个 ASP.NET MVC 项目。(事实上​​,为了记录,这是我的第一个生产网站)。

这是一个针对 HTML 5 的移动网页。

这个页面查找一些“昂贵”的信息。首先,它使用 html 5 地理编码功能从他们的浏览器中获取客户的 latlong。

我将该信息传递给控制器​​。该控制器使用 Google Maps API 填充城市和州(进入位置模型),然后在视图中使用它。

因此,这些数据在两个方面很昂贵,首先查找它需要时间,其次,在 Google API 的情况下,它实际上并不是免费的,因为 Google 限制了每天可以进行的调用次数。

我了解 MVC 旨在“拥抱”网络,包括 http 是无状态协议这一事实。

尽管如此,我想避免在每次页面加载时为需要它的每个端点获取这些昂贵的数据。此外,我想跟踪的另一个状态是数据已经被获取。

在 MVC 3 Web 应用程序上实现这一目标的最佳方式/最佳实践是什么?由于我的位置模型有 4 个数据点(拉长城市州)并且有第五个数据点(检索到的数据),我真的很想避免使用查询字符串来执行此操作或所有这些数据点的路线?

我确信这是一个常见的需求,但老实说我不知道​​如何解决它。任何帮助将不胜感激。

赛斯

4

6 回答 6

3

在我看来,您想缓存对谷歌的 API 调用。

http://msdn.microsoft.com/en-us/library/18c1wd61(v=vs.71).aspx

您可以将从谷歌获得的对象存储在缓存中,并在新的控制器事件中调用它。您还可以创建另一个对象,该对象具有来自 google 的对象和一个指示您是否已获取数据的布尔值。

在我看来,缓存将是你最好的选择。

于 2012-05-02T20:30:11.093 回答
2

You can store it in session state if it is available in your case instead of passing between pages.

于 2012-05-02T20:28:51.630 回答
2

由于这是“昂贵”的数据,但仍不会长时间持久化,您可以:

  • 使用会话状态
  • 将数据放入缓存中,然后
    • 设置cookie以启用从缓存中检索“昂贵”数据
    • 使用每个查询唯一的缓存键(lat long city state ?)
  • 将数据(“检索到的数据”)存储在客户端(因为您似乎没有将其保存在服务器端)

我个人的偏好是具有唯一键的服务器端缓存。

于 2012-05-02T20:30:51.420 回答
1

将昂贵的数据存储到缓存中,并通过您发送给谷歌的参数构建缓存 ID,缓存 ID 对于每个不同的地方都应该是唯一的

于 2012-05-02T20:30:04.137 回答
0

另一种选择是html5 storage。您将需要检查您的目标浏览器是否支持它。这种方法的优点是服务器没有在会话或数据库中跟踪这些数据——事实上,服务器根本不知道客户端存储。

于 2012-05-02T20:31:49.423 回答
0

尝试

Session[xxx]=xxx;

或者

Application[xxx]=xxx;

反而

于 2012-05-02T20:31:34.820 回答