从代码后面获得重写的url

本文关键字:重写 url 代码 | 更新日期: 2023-09-27 18:05:43

我们正在使用IIS 7的"URL重写"功能来处理我们的一些URL

例如,重写 的规则
/viewSompage.aspx?id=123&title=some-title 

重写

/View/SomePage/some-title/123/

出于多种目的(其中之一是能够在电子邮件模板中设置重写的url等),我们需要在codebehind中获得重写的url,给定字符串。

我知道重写器会自动应用那些使用出站规则的页面,但我仍然需要获得重写的url用于其他目的。

我希望能够传递一个url字符串,并使url重写器应用任何适用的规则到给定的url示例

String rewrittenURL = ApplyRewritingRules("/viewSompage.aspx?id=123&title=some-title");

thanks in advance

从代码后面获得重写的url

好吧,我找到了一个体面的解决方案,不需要我做多余的东西。

Page.ResolveUrl(Request.RawUrl)

其中Page是System.Web.UI.Page…这是标准的aspx页面

请求……如果你试图访问请求,使用httpconnect . current . request…

RawUrl = /viewSompage.aspx?id=123&title=some-title 

重写为(根据我在web.config中指定的规则)

/View/SomePage/some-title/123/
从那里,我可以像这样用一行代码构建整个链接:
String url = String.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host, Page.ResolveUrl(request.RawUrl));

您可以创建自定义url重写器类并将其配置存储在SQL表中
表Url_Rules:

  • int id
  • 原始nvarchar (250)
  • nvarchar(250)重写

可以使用这个表存储多个规则,然后使用global。Asax通过在数据库中查找合适的路径来执行重写规则,例如:
SELECT original from Url_Rules where rewritten = 'http://someurl/article/id'

Sub Application_BeginRequest(ByVal sender As Object, ByVal e As EventArgs)
    urlEngine.Rewrite(System.Web.HttpContext.Current.Request.RawUrl.ToString)
End Sub

urlEngine。重写完成从db获取数据的工作,然后将其应用到当前上下文中:

System.Web.HttpContext.Current.RewritePath(url_from_db)

这样你可以卸载IIS 7 URL重写,然后你可以做第二个方法,只返回URL编码为字符串和电子邮件:

public Function GetUrl(ByVal url As String)
       return url_from_db
End Function

这不是一个很好的答案,但我认为您不应该为此目的使用Url重写。这会让你的代码难以阅读,因为服务器端发生的事情对你的代码是不可见的,我不完全确定你甚至可以动态地改变它。如果我没记错的话,那东西在网上。