Маршрутизация, строка запроса и существующие URL-адреса веб-форм
У меня есть приложение WebForms и я думал об использовании маршрутизации для более удобных URL. Однако во время моей работы я обнаружил, что параметры строки запроса, которые являются частью маршрута, больше не доступны через Request.QueryString (что имеет смысл). В идеале мне бы хотелось, чтобы эти значения были доступны из коллекции QueryString, поэтому мне не нужно обновлять сотни страниц, используя значения строки запроса, чтобы вместо них использовать значения данных маршрута. Например, поэтому мне не нужно заменять это:
var foo = Request.QueryString["foo"];
с этим:
var foo = RouteData.Values["foo"];
Я думал об использовании URL Rewrite вместо этого, но в конечном итоге я хотел бы воспользоваться именованными маршрутами для перенаправления и гиперссылок.
Есть ли способ использовать маршрутизацию без обновления каждой отдельной страницы, чтобы использовать коллекцию RouteData вместо коллекции QueryString?
1 ответ
В global.asax
void RegisterRoutes(RouteCollection routes)
{
routes.MapPageRoute("Products","Products/{id}/{productname}",
"~/productdetails.aspx");
}
в products.aspx
<ahref='<%#string.Format("/Products/{0}/{1}",Eval("id"),Clean.CleanUrl(Eval("ProductName").ToString())) %>'><%# Eval("ProductName") %></a>
в productsdetails.aspx.cs
if (!IsPostBack)
{
if (RouteData.Values["id"] != null)
{
loadproduct();
}
}
void loadproduct()
{
select ............. where id= RouteData.Values["id"].ToString();
}
Это чистый класс
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;
}
}