【问题标题】:Best way to generate url via Page.GetRouteUrl in a helper class?在辅助类中通过 Page.GetRouteUrl 生成 url 的最佳方法?
【发布时间】:2010-11-05 16:31:23
【问题描述】:

我刚刚在一个新的 asp.net 4 Web 表单应用程序中添加了路由,并且我的路由表设置正常,页面请求工作正常。

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

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

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

【问题讨论】:

    标签: asp.net routing


    【解决方案1】:

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

    var page = HttpContext.Current.Handler as Page;
    

    您可以将其转换为页面类型。根据您发出的请求类型,它可能并不总是页面(例如来自 Web 服务调用等)。

    HTH。

    【讨论】:

    • 啊哈,知道怎么做就这么简单! :) 太棒了,很好玩。非常感谢!
    • 啊,只是我注意到的另一种情况 - 我有一个 .ashx 处理程序文件,它可以为网站动态生成我的 google 站点地图。由于生成 URL 的请求来自处理程序文件,因此上述方法似乎不起作用。您知道有什么方法可以解决这个问题,还是在这种情况下我无法使用 Page.GetRouteUrl?
    • 看起来最好的办法是尝试 RouteCollection.GetVirtualPath 方法;这表示它与 Page.GetRouteUrl msdn.microsoft.com/en-us/library/… 几乎相同。看看反射器,那是完全正确的......所以你必须看看你可以用什么来让它工作......这些场景是我在后面的陈述中提到的事情之一;它可能会变得棘手。祝你好运。
    • 非常感谢布赖恩,我会尝试一下,看看我能做些什么。干杯。
    • 更新:我最终在以下线程中找到了解决这个次要问题的方法:forums.asp.net/p/1322760/2718242.aspx
    猜你喜欢
    • 1970-01-01
    • 2016-06-22
    • 2014-02-11
    • 2017-11-30
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    相关资源
    最近更新 更多