从后面的代码中获取重写的url

时间:2013-03-25 22:20:27

标签: c# asp.net .net c#-4.0 url-rewriting

我们正在为某些网址使用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");

提前致谢

3 个答案:

答案 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:

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

您可以使用此表存储多个规则,然后使用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重新编译。