我有一个WebForms应用程序,并且正在考虑使用路由来获得更友好的URL。但是,在我的修修补补过程中,我发现通过Request.QueryString不再提供作为路径一部分的查询字符串参数(这是有道理的)。理想情况下,我仍然希望能够从QueryString集合中获取这些值,因此我不必使用查询字符串值更新数百个页面来代替使用路径数据值。例如,所以我不必替换它:
var foo = Request.QueryString["foo"];
用这个:
var foo = RouteData.Values["foo"];
我正在考虑使用URL Rewrite,但我最终希望利用命名路由进行重定向和超链接。
有没有办法在不更新每一页的情况下使用路由来使用RouteData集合而不是QueryString集合?
答案 0 :(得分:1)
在global.asax
中void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("Products","Products/{id}/{productname}",
"~/productdetails.aspx");
}
in products.aspx
<ahref='<%#string.Format("/Products/{0}/{1}",Eval("id"),Clean.CleanUrl(Eval("ProductName").ToString())) %>'><%# Eval("ProductName") %></a>
if (!IsPostBack)
{
if (RouteData.Values["id"] != null)
{
loadproduct();
}
}
void loadproduct()
{
select ............. where id= RouteData.Values["id"].ToString();
}
这是Clean Class
public static class Clean
{
public static string CleanURL(this string kelime)
{
if (kelime == "" || kelime == null) { return ""; }
kelime = kelime.Replace("ş", "s");
kelime = kelime.Replace("Ş", "S");
kelime = kelime.Replace(".", "");
kelime = kelime.Replace(":", "");
kelime = kelime.Replace(";", "");
kelime = kelime.Replace(",", "");
kelime = kelime.Replace(" ", "-");
kelime = kelime.Replace("!", "");
kelime = kelime.Replace("(", "");
kelime = kelime.Replace(")", "");
kelime = kelime.Replace("'", "");
kelime = kelime.Replace("ğ", "g");
kelime = kelime.Replace("Ğ", "G");
kelime = kelime.Replace("ı", "i");
kelime = kelime.Replace("I", "i");
kelime = kelime.Replace("ç", "c");
kelime = kelime.Replace("ç", "C");
kelime = kelime.Replace("ö", "o");
kelime = kelime.Replace("Ö", "O");
kelime = kelime.Replace("ü", "u");
kelime = kelime.Replace("Ü", "U");
kelime = kelime.Replace("`", "");
kelime = kelime.Replace("=", "");
kelime = kelime.Replace("&", "");
kelime = kelime.Replace("%", "");
kelime = kelime.Replace("#", "");
kelime = kelime.Replace("<", "");
kelime = kelime.Replace(">", "");
kelime = kelime.Replace("*", "");
kelime = kelime.Replace("?", "");
kelime = kelime.Replace("+", "-");
kelime = kelime.Replace("\"", "-");
kelime = kelime.Replace("»", "-");
kelime = kelime.Replace("|", "-");
kelime = kelime.Replace("^", "");
return kelime;
}
}