Asp.net 在助手类中通过Page.GetRouteUrl生成url的最佳方法?

Asp.net 在助手类中通过Page.GetRouteUrl生成url的最佳方法?,asp.net,routing,Asp.net,Routing,我刚刚在一个新的asp.NET4WebForms应用程序中添加了路由,并已设置好路由表,页面请求工作正常 现在我想做的是,每当我需要生成一个seo友好Url时,就使用Page.GetRouteUrl方法。我开始在不同的页面上实现这一点,然后认为如果我在自己的助手类中有一个方法来构造这个url(使用Page.GetRouteUrl方法),那么代码可能会减少一点,因为每次都需要针对Page.GetRouteUrl方法指定几个参数 然而,在我的helper类中,它不知道“Page”是什么。我想我可以从

我刚刚在一个新的asp.NET4WebForms应用程序中添加了路由,并已设置好路由表,页面请求工作正常

现在我想做的是,每当我需要生成一个seo友好Url时,就使用Page.GetRouteUrl方法。我开始在不同的页面上实现这一点,然后认为如果我在自己的助手类中有一个方法来构造这个url(使用Page.GetRouteUrl方法),那么代码可能会减少一点,因为每次都需要针对Page.GetRouteUrl方法指定几个参数

然而,在我的helper类中,它不知道“Page”是什么。我想我可以从希望生成路由url的页面传入“Page”,但在某些情况下,我想在另一个不知道“Page”是什么的类中构造这些url之一,在这种情况下,我将无法将其作为参数传入(因此无法在我的助手类中使用Page.GetRouteUrl)


在没有页面对象实例的类中使用Page.GetRouteUrl时,通常的方法是什么?

您可以将页面作为构造函数参数传递,或者这实际上是页面引用:

var page = HttpContext.Current.Handler as Page;
您可以将其强制转换为页面类型。根据您发出的请求的类型,它可能并不总是页面(例如来自web服务调用等)


HTH.

Aha,知道怎么做就这么简单了!:)太棒了,真不错。谢谢!啊,我注意到的另一个场景是,我有一个.ashx处理程序文件,它可以动态地为网站生成我的google站点地图。由于生成Url的请求来自处理程序文件,因此上述方法似乎不起作用。你知道有什么办法可以解决这个问题吗,或者在这种情况下我不能使用Page.GetRouteUrl吗?看起来你最好的办法是尝试RouteCollection.GetVirtualPath方法;这说明它实际上与Page.GetRouteUrl相同。看反射器,这是完全正确的。。。所以你必须看看你能用什么让它工作。。。这些情景是我在后来的发言中提到的事情之一;这可能会变得棘手。祝你好运。非常感谢布莱恩,我会试试看,看看我能做些什么。Cheers.UPDATE:我最终在以下线程中找到了第二个问题的解决方案: