【问题标题】:Rewrite URLS using global.asax使用 global.asax 重写 URL
【发布时间】:2012-04-02 18:11:49
【问题描述】:

我正在尝试在我的 vb.net (.net 4) 项目中创建一些友好的 URL,并且我正在尝试使用我阅读的有关 global.asax 和 Application_Beginrequest 的内容来完成它,但我无法编译它。

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    Dim httpContext As System.Web.HttpContext = httpContext.Current
    Dim currentURL As String = currentURL.Request.Path.ToLower()
    If currentURL.IndexOf("widgets") > 0 Then
        objHttpContext.RewritePath("products.aspx?ID=123")
    Else
        objHttpContext.RewritePath(httpContext)
    End If
End Sub

以上是我正在尝试的,但它在 objHttpContext 上出错。还有另一种方法吗?理想情况下,一旦我得到上述方法,我将尝试使用数据库调用来计算 URL。因此,在这个方向上的任何建议也将受到欢迎。我试图避免在 IIS 上安装任何东西,因为它是一个负载平衡的环境,我不想在每台服务器上都安装一些东西。

谢谢

汤姆

【问题讨论】:

    标签: asp.net vb.net url-rewriting


    【解决方案1】:

    您应该访问 HttpApplication.Context。这是我的做法(C#):

    string reqPath = Request.Url.AbsolutePath;
    if(reqPath=="/")
        newPath="/Pages/PL/Main.aspx";
    if (newPath != "")
        HttpApplication.Context.RewritePath(newPath);
    

    正如我在文档中看到的,您应该能够使用完全相同的语法来访问 VB.NET 中的上下文。

    如果你真的想要,你也可以使用 II7 url rewrite 模块。

    【讨论】:

    • 如果我可以问的话,与 asp.net 路由相比有什么优势?
    • @walther:路由是一种 MVC 功能,不是标准的 ASP.NET。问题未提及 MVC。
    • 看,这就是你错的原因。自 .NET 4 以来,路由也是 Web 表单的一部分,OP 表示他也在使用它。不要停留在过去,.NET 不断发展,我们需要跟上它:)
    • 有点苛刻的评论,但采取了。学到了一些重要的东西。 ASP.NET 不是我的主要专长。
    • 如果听起来很刺耳,我很抱歉。下次我一定会尝试更有礼貌。谢谢你让我知道。也许我也学到了一些重要的东西:)
    【解决方案2】:

    你为什么要使用重写,当你使用 asp.net 路由可以很容易地做到这一点时?

    请查看以下链接以获取更多信息: http://msdn.microsoft.com/en-us/library/cc668201.aspx

    【讨论】:

    • ...“路由以提供仅在 MVC 应用程序和动态数据应用程序中使用的功能”
    • @mustafaöztürk,刷新你的知识,路由也适用于网络表单。
    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-18
    • 2012-07-24
    • 2013-05-09
    相关资源
    最近更新 更多