Asp.net 代理的路由参数主键

Asp.net routing parameter primary key to surrogate

我有一个 ASP.NET(不是 mvc)应用程序,我想使用路由映射来转换 url,其中包括一个代理键(最终用户熟悉并使用它用于引用各种项目)说 www/entity/321654789,使用主键调用页面,如下所示:www/page.aspx?id=103457

执行此操作的最佳方法是什么?我的研究只发现了两种方法,自定义 url 路由处理程序和让页面知道新参数。有更好的方法吗?如果不是,那两种已知方法中哪一种更好?

路由是双向映射。据我所知,扩展 RouteHandler 只能用于映射传入路由。但是对于 生成 URL s(用于页面之间的链接),这种方法将不起作用。

因此,更好的选择是 inherit RouteBase (or Route) for advanced route customization. You just need to override GetRouteData to map a URL to a dictionary of route values, and override GetVirtualPath 将路由值字典映射到 URL。按照惯例,如果两种方法都不匹配任何值,则这两种方法都应该 return null(然后路由框架将尝试注册下一个路由)。

然后只需在 RouteConfig 文件中配置自定义路由即可。

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        // Add a custom Route instance.
        routes.Add(new MyCustomRoute());

        // Add other routes...
    }
}

就您的代理键而言,您可以使用几种不同的方法。

  • 在字典中缓存键-代理键映射。从地图中查找key并添加到GetRouteData中的route values中,对GetVirtualPath做反向查找key-surrogate key
  • 在字典中缓存键-代理键映射。从地图中查找键并使用 URL 中的键进行 301 重定向到页面。在这种情况下不需要反向查找。
  • 使用上述任一方法,但使用不同的缓存策略。可以将 file caching or a distributed cache 与 System.Runtime.Caching 一起使用。