2013-03-25 78 views
0

重写URL我们正在使用IIS 7 “URL重写” 功能,我们的一些网址得到代码隐藏

例如,用于重写

/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

好吧,我发现一个体面的解决方案,不需要我做冗余的东西。

Page.ResolveUrl(Request.RawUrl) 

哪里页是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

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

0

,你可以创建一个自定义URL重写类,并存储在SQL表中它的配置
表Url_Rules:

  • INT ID
  • 为nvarchar(250)原
  • 为nvarchar(250)改写

您可以使用此表来存储多个规则,然后使用Global.asax的执行由看重写规则荷兰国际集团的分贝为适当的路径例如:从Url_Rules
SELECT原来这里改写= '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做工作得到从数据库然后将其应用到当前上下文中的数据:

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 
+0

a)我不想做一个额外的数据库商店或为此创建一个单独的类。我们已经根据正则表达式在web.config中定义了规则。它只是使整个事情变得多余,额外的数据库调用也会影响性能。 – robert 2013-03-25 23:13:50

+0

好比更简单,只需使用web.config中的数据,获取规则并使用Regex.Replace()http://msdn.microsoft.com/en-us/library/xwewhkd1针对您的URL运行它。 aspx – Sherlock 2013-03-25 23:18:05

+0

必须有更优雅的解决方案。希望能够告诉承销商解析给定的url并返回它的实际输出结果。 – robert 2013-03-26 00:03:23