我们正在为某些网址使用IIS 7“网址重写”功能
例如重写
的规则/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");
提前致谢
答案 0 :(得分:4)
好的,我找到了一个不错的解决方案,不需要我做多余的事情。
Page.ResolveUrl(Request.RawUrl)
其中Page是System.Web.UI.Page的实例...这是您的标准aspx页面
请求...如果您尝试访问请求,请使用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));
答案 1 :(得分:0)
您可以创建自定义URL重写器类并将其配置存储在sql表中
表Url_Rules:
您可以使用此表存储多个规则,然后使用global.asax执行重写规则,方法是在db中查找适当的路径,例如:
从Url_Rules中选择原文,其中重写= '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
答案 2 :(得分:-1)
这不是一个答案,但我认为您不应该为此目的使用Url Rewrite。它使您的代码难以阅读,因为服务器端发生的事情对您的代码是不可见的,我不完全确定您甚至可以动态地更改它。如果我没记错的话,那些东西都在web.config中,并且在其中更改值需要IIS重新编译。