Как изменить URL моей веб-формы с "Pages / Games.aspx? Page = 1" на "games / 1"? - PullRequest
0 голосов
/ 28 октября 2018

Я использую VS 2017 У меня простая структура проекта.

enter image description here

Используя устаревшие веб-формы, я пытаюсь добавить простую маршрутизацию для моего Games.aspx. Согласно MSDN это будет выглядеть следующим образом. Просто создайте новый класс RouteConfig в папке App_Code (это место, где я определяю маршруты)

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("", "games/{page}", "~/Games.aspx");
    }
}

И вызвать этот статический метод в методе Global.asax Start.

    public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }
}

Но когда я запускаю проект, я получаю сообщение Не найдено:

enter image description here

Мой Games.aspx работает, когда я называю это напрямую, как Pages/Games.aspx?page=1, но я не хочу, чтобы это было в моем URL. Я попытался отладить метод Start, но он, кажется, скомпилирован IIS или чем-то еще. Итак, где я не прав?

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

Вы могли бы справиться с этим с помощью модуля перезаписи URL:

<system.webServer>
    <rewrite>
        <rules>
            <rule name="RewriteGames" stopProcessing="true">
                <match url="^games/(\d+)" />
                <action type="Rewrite" url="Pages/Games.aspx?page={R:1}" />
            </rule>
        </rules>
    </rewrite>
</system.webServer>

Поскольку @ a.bajorinas ускользает от, если вы захватите параметр page в своем маршруте, то вам придется изменитькод для использования Page.RouteData вместо Request.QueryString.Это не большое изменение на самом деле.Но если вы хотите просто изменить URL-адрес, проще всего сделать это в файле web.config, используя приведенный ниже код.

0 голосов
/ 30 октября 2018

Мне не удалось скопировать ваш код, поскольку помещение класса RouteConfig в App_Code не позволило бы мне ссылаться на него в Global.asmx.То, что я сделал, это поместил метод для отображения маршрутов внутри моего Gloabal.asmx Теперь это выглядит так:

public class Global : System.Web.HttpApplication
{
    protected void Application_Start(object sender, EventArgs e)
    {
       RegisterRoutes(RouteTable.Routes);
    }

    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute("", "games/{page}", "~/Games.aspx");
    }
}

Когда бы я ни комментировал метод RegisterRoutes(), я получал ту же ошибку.Попробуйте этот подход и дайте мне знать, если это поможет.Кроме того, чтобы получить переданное значение в Game.aspx, вы должны использовать это Page.RouteData.Values["page"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...