2

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

例如重写的规则

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

重写为

/View/SomePage/some-title/123/

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

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

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

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

提前致谢

4

3 回答 3

4

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

Page.ResolveUrl(Request.RawUrl)

Page 是 System.Web.UI.Page 的一个实例......这是您的标准 aspx 页面

Request ... 如果您尝试访问请求,请使用 HttpContect.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));
于 2013-03-26T07:49:37.770 回答
0

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

  • 内部编号
  • nvarchar(250) 原版
  • nvarchar(250) 重写

您可以使用此表存储多个规则,然后使用 global.asax 通过在 db 中查找适当的路径来执行重写规则,例如:
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.Rewrite 完成从 db 获取数据的工作,然后将其应用于当前上下文:

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

这样,您可以卸载 IIS 7 URL Rewrite,而不是创建第二种方法,该方法仅返回编码为字符串的 url 并通过电子邮件发送:

public Function GetUrl(ByVal url As String)
       return url_from_db
End Function
于 2013-03-25T23:05:46.663 回答
-1

这不是一个很好的答案,但我认为您不应该为此目的使用 Url Rewrite。它使您的代码难以阅读,因为发生在服务器端的事情对您的代码是不可见的,而且我不完全确定您甚至可以动态更改它。如果我没记错的话,这些东西在 web.config 中,更改其中的值需要 IIS 重新编译。

于 2013-03-25T22:24:24.300 回答