从代码后面获得重写的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
好吧,我找到了一个体面的解决方案,不需要我做多余的东西。
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重写。这会让你的代码难以阅读,因为服务器端发生的事情对你的代码是不可见的,我不完全确定你甚至可以动态地改变它。如果我没记错的话,那东西在网上。