c# - 如何避免在不同位置具有相同键/值查询字符串的重复网址?

标签 c# asp.net-mvc azure asp.net-web-api azure-redis-cache

我正在使用 Azure Redis 缓存,我的 key 是请求 url。我有一个 web-api2/mvc5 应用程序,如果带有请求 url 的 key 存在,它会从 Redis 服务器返回缓存结果,否则它将处理请求并将结果保存在 Azure Redis 缓存服务器中。我有 IOS/Android 和 javascript 的移动客户端。问题是有时我的网址看起来像,

http://example.com/MyPath/?b=2&a=1&c=
http://example.com/MyPath/?b=2&a=1&c
http://example.com/MyPath/?a=1&b=2
http://example.com/MyPath/?c=&a=1&b=2
http://example.com/MyPath/?a=1&b=2
http://example.com/MyPath/?a=1&b=2&c=

上面的url指向相同的资源。它应该返回相同的响应(如果存在缓存响应),但由于 key(url) 不同,它会完全处理请求并在 Azure Redis 缓存服务器上保存不同的记录。如何解决这种情况?

最佳答案

使用 MVC 路由将为您的 URL 提供标准格式。

您将能够在 ASP.NET 中使用默认的 html 帮助程序,例如 @Html.Action("MethodName","Controller",new { a=1, b=2 })

您可以在 RouteConfig.cs 类中指定自定义路由模板(默认情况下在 app_start 中),也可以使用属性路由。

MSDN: MVC5 Attribute Routing

关于c# - 如何避免在不同位置具有相同键/值查询字符串的重复网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29915271/

相关文章:

asp.net-mvc - StructureMap-MVC3 中 scan.TheCallingAssembly、scan.WithDefaultConventions 的用途

javascript - ASP.NET C# 如何将 Canvas 图像作为位图传递给 Controller

entity-framework - Azure WebJob 不再选取门户中的 Entity Framework 连接字符串设置

azure - 将python web部署到azure应用程序服务时如何选择区域?

entity-framework - 如何避免使用移动服务与 Azure 主数据库发生不必要的连接?

c# - 线程安全惰性类

c# - C# 编译器中的已知错误列表

c# - 尝试将 MySQL 表显示为 cshtml

c# - Swagger 无法与多个版本的 ASP.NET WebApi 应用程序一起正常工作

c# - 使用 AJAX 从列表返回属性