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

时间:2015-01-31 09:09:50

标签: asp.net asp.net-mvc-routing url-routing

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

这样做的最佳方法是什么?我的研究只发现了两种方法,自定义URL路由处理程序,并让页面知道新参数。有更好的方法吗?如果没有,两种已知方法中的哪一种更好?

1 个答案:

答案 0 :(得分:1)

路由是双向映射。据我所知,扩展RouteHandler只能用于映射传入路由。但是对于生成网址(用于链接您的网页),这种方法无法正常工作。

因此,更好的选择是inherit RouteBase(或路由)进行高级路由自定义。您只需要覆盖GetRouteData以将URL映射到路由值的字典,并override GetVirtualPath将路由值的字典映射到URL。按照惯例,如果两个方法都不匹配任何值,则两个方法都应返回null(并且路由框架将尝试注册下一个Route)。

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

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

        // Add other routes...
    }
}

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

  • 在Dictionary中缓存key-surrogate键映射。从地图中查找密钥并将其添加到GetRouteData中的路由值,并为GetVirtualPath执行反向查找密钥代理密钥。
  • 在Dictionary中缓存key-surrogate键映射。从地图中查找密钥,并使用URL中的密钥进行301重定向到页面。在这种情况下不需要反向查找。
  • 使用上述任一方法,但使用不同的缓存策略。可以对System.Runtime.Caching使用file cachingdistributed cache