从代码隐藏中获取重写的 url

rob*_*ert 2 .net c# asp.net url-rewriting c#-4.0

我们正在为我们的一些 url 使用 IIS 7“URL 重写”功能

例如,重写的规则

/viewSompage.aspx?id=123&title=some-title 
Run Code Online (Sandbox Code Playgroud)

改写为

/View/SomePage/some-title/123/
Run Code Online (Sandbox Code Playgroud)

出于多种目的(其中之一能够在电子邮件模板中设置重写的 url 等),我们需要在给定字符串的情况下在代码隐藏中获取重写的 url。

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

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

String rewrittenURL = ApplyRewritingRules("/viewSompage.aspx?id=123&title=some-title");
Run Code Online (Sandbox Code Playgroud)

提前致谢

rob*_*ert 5

好的,我找到了一个不错的解决方案,不需要我做多余的事情。

Page.ResolveUrl(Request.RawUrl)
Run Code Online (Sandbox Code Playgroud)

其中 Page 是 System.Web.UI.Page 的一个实例……那是你的标准 aspx 页面

请求 ... 如果您尝试访问请求,请使用 HttpContect.Current.Request ...

RawUrl = /viewSompage.aspx?id=123&title=some-title 
Run Code Online (Sandbox Code Playgroud)

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

/View/SomePage/some-title/123/
Run Code Online (Sandbox Code Playgroud)

从那里我可以只用一行代码构建整个链接:

String url = String.Format("{0}://{1}{2}", Request.Url.Scheme, Request.Url.Host, Page.ResolveUrl(request.RawUrl));
Run Code Online (Sandbox Code Playgroud)