Разбор строки запроса для перезаписи URL asp.net 4.0 - PullRequest
0 голосов
/ 08 сентября 2011

Мне нужно решить проблему с перезаписью URL, используя функцию маршрутизации в asp.net 4.0. когда пользователь вводит url как

www.mysite.com / product.aspx? ID = 101

, тогда отображается правая страница, но предположим, что если я изменю местоположение и имя страницы, и когда пользователь введет URL, например,

www.mysite.com / product.aspx? ID = 101

тогда ошибка страницы не найдена.

Так скажите, пожалуйста, как я мог решить эту ситуацию, используя функцию маршрутизации asp.net 4.0. это возможно?

Я как обработчик маршрутизации и мой пример кода

 void Application_Start(object sender, EventArgs e)
    {
        // Code that runs on application startup
        RouteTable.Routes.MapPageRoute
              ("Source", "Source/{ID}/{Title}", "~/Source.aspx");
        RouteTable.Routes.MapPageRoute
              ("Source1", "MyData/Source/{ID}/{Title}", "~/MyData/Source.aspx");
    }

Приведенный выше код является просто примером, и я таким образом перезаписываю URL. Это очень просто. Но если мне нужно решить вышеописанную проблему с отображением URL с помощью маршрутизации, то как я могу это сделать и какой код мне нужно написать в событии Application_Start.

Я хочу, когда пользователь вводит

www.mysite.com / product.aspx? ID = 101

тогда он должен перенаправить на

www.mysite.com / прод / Myproduct.aspx? ProdID = 101

Этот URL. Поэтому, пожалуйста, объясните мне, как я могу сделать такое отображение с помощью функции маршрутизации asp.net 4.0.

1 Ответ

2 голосов
/ 08 сентября 2011

Единственный способ, которым вы можете направить путь к пути, содержащему строку запроса, - это использовать собственный обработчик.По умолчанию маршрутизация передает переменные в RouteData.

Таким образом, у вас есть 3 варианта.

1) написать собственный обработчик маршрута, чтобы переписать путь, используя RouteData и добавить его в строку запроса.Я написал некоторый код, аналогичный коду для этого в этом вопросе .

2) обновите MyProduct.aspx, чтобы проверить наличие продукта id в QueryString, если он не найден в prodid, и используйте MapPageRoute (новая страница имеет доступ к исходной строке запроса).

RouteTable.Routes.MapPageRoute(
                    "product", 
                    "product.aspx",
                    "~/prod/myproduct.aspx");

3) использовать правила перезаписи IIS7

<rewrite>
    <rules>
        <rule name="product">
            <match url="product.aspx?id=([0-9]+)" />
            <action type="Rewrite" url="prod/myproduct.aspx?prodid={R:1}" />
        </rule>
    </rules>
</rewrite>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...