urlrewrite.net - 附加在PostBack上的Real Querystring

时间:2012-12-17 14:32:32

标签: asp.net .net url-rewriting iis-6 rewrite

我正在使用urlrewrite.net构建更友好的网址,并在我的web.config中使用以下重写规则:

<if url="^/forsale/(.+)/(.+)/(.+)/(.+)/(.+)">
 <rewrite to="/aircraft/result.aspx?view=$2&amp;cat=$3&amp;loc=$4&amp;model=$5" />
</if>

这意味着我现在可以浏览到: http://www.mydomain.com/dept/manufacturer/,734,,810,,159,,163,,,,,,,,/1/999999/false

查看以下网址的实际网址: http://www.mydomain.com/folder/result.apsx?view=,734,,810,,159,,163,,,,,,,,/1/999999/false?view=,734,,810,,159,,163,,,,,,,,&cat=1&loc=999999&model=false

这可以正常工作,直到我触发任何类型的PostBack事件(按钮点击等),此时真实页面的查询字符串被添加到重写URL的末尾,例如:

http://www.mydomain.com/dept/manufacturer/,734,,810,,159,,163,,,,,,,,/1/999999/false?view=,734,,810,,159,,163,,,,,,,,&cat=1&loc=999999&model=false

非常感谢任何帮助/建议/答案。

感谢。

1 个答案:

答案 0 :(得分:5)

.NET Framework 3.5 SP1中的ASP.NET提供了一种非常简单的方法来解决这个问题。现在,您可以使用名为Action的HtmlForm类的属性将回发URL设置为浏览器在重写之前请求的URL。在ASP.NET中,您可以使用HttpRequest.RawUrl属性获取该URL。因此,要在使用URL重写模块时修复Web表单的回发URL,您需要将以下代码添加到页面中:

protected void Page_Load(object sender, EventArgs e)  
{  
    form1.Action = Request.RawUrl;  
}  

点击此处查看详细信息:

ASP.NET postbacks and URL rewriting

另外,请检查:

使用URL重写处理ASP.NET PostBack

使用ASP.NET 2.0,您可以使用更清晰的技巧来重写控件上的“action”属性。具体来说,您可以利用新的ASP.NET 2.0控制适配器可扩展性体系结构来自定义控件的呈现,并使用您提供的值覆盖其“action”属性值。这不需要您更改.aspx页面中的任何代码。相反,只需将.browser文件添加到/ app_browsers文件夹中,该文件夹注册一个Control Adapter类,用于输出新的“action”属性:

点击此处查看详细信息:

Tip/Trick: Url Rewriting with ASP.NET