Маршрутизация ASP.NET с помощью веб-форм

Я прочитал Маршрутизация ASP.NET... Перезапись URL-адреса? и Использование маршрутизации с помощью WebForms, которые являются отличными статьями, но ограничиваются простыми иллюстративными примерами "привет мир".

Есть ли кто-нибудь, используя маршрутизацию ASP.NET с веб-формами нетривиальным способом? Любые ошибки, о которых нужно знать? Проблемы с производительностью? Дальнейшее рекомендуемое чтение, на которое я должен обратить внимание, прежде чем вспахивать в реализацию моей собственной?

ИЗМЕНИТЬ Найденные дополнительные полезные URL:

Ответ 5

Маршрутизация URL-адресов приведена простым способом в следующих статьях. Он предоставляет информацию, например, отправку запроса на маршрут, получение параметров URL на целевой странице, установку значений по умолчанию для параметров.

Маршрутизация URL в части веб-форм ASP.Net - 1

Маршрутизация URL-адресов в ASP.Net Web Forms Part - 2

Ответ 6

Простой пример использования маршрутизации в ASP.NET

  • Создание пустого веб-приложения
  • Добавить первую форму - Default.aspx
  • Добавить вторую форму - Second.aspx
  • Добавить третью форму - Third.aspx
  • Добавить в default.aspx 3 кнопки -

    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Redirect("Second.aspx");
    }
    
    protected void Button2_Click(object sender, EventArgs e)
    {
        Response.Redirect("Third.aspx?Name=Pants");
    }
    
    protected void Button3_Click(object sender, EventArgs e)
    {
        Response.Redirect("Third.aspx?Name=Shoes");
    }
    
  • Чтение строки запроса на третьей странице

    protected void Page_Load(object sender, EventArgs e)
    {
        Response.Write(Request.QueryString["Name"]);
    }
    

Теперь, если вы запустите программу, вы сможете перейти ко второй и третьей форме. Так оно и было. Добавьте добавление маршрутизации.

  1. Добавить новый элемент - Global.aspx   используя System.Web.Routing;

    protected void Application_Start(object sender, EventArgs e)
    {
        RegisterRoutes(RouteTable.Routes);
    }
    void RegisterRoutes(RouteCollection routes)
    {
        routes.MapPageRoute(
            "HomeRoute",
            "Home",
            "~/Default.aspx"
        );
        routes.MapPageRoute(
            "SecondRoute",
            "Second",
            "~/Second.aspx"
        );
        routes.MapPageRoute(
            "ThirdRoute",
            "Third/{Name}",
            "~/Third.aspx"
        );
    }
    
  2. В default.aspx изменить   protected void Button1_Click (отправитель объекта, EventArgs e)   {      //Response.Redirect( "Second.aspx" );       Response.Redirect(GetRouteUrl ( "SecondRoute", null));   }

    protected void Button2_Click(object sender, EventArgs e)
    {
        //Response.Redirect("Third.aspx?Name=Pants");
       Response.Redirect(GetRouteUrl("ThirdRoute", new {Name = "Pants"}));
    }
    
    protected void Button3_Click(object sender, EventArgs e)
    {
       // Response.Redirect("Third.aspx?Name=Shoes");
        Response.Redirect(GetRouteUrl("ThirdRoute", new { Name = "Shoes" }));
    }
    
  3. Изменить загрузку страницы в файле third.aspx

    protected void Page_Load(object sender, EventArgs e)
    {
        //Response.Write(Request.QueryString["Name"]);
        Response.Write(RouteData.Values["Name"]);
    }
    

Запустите программу, обратите внимание, что URL выглядит намного чище - в нем нет расширений файлов (Second.aspx становится только вторым)

  1. Чтобы передать более одного аргумента

    • добавить новую кнопку в default.aspx со следующим кодом:

      protected void Button4_Click(object sender, EventArgs e)
      {
          Response.Redirect(GetRouteUrl("FourthRoute", new { Name = "Shoes" , Gender = "Male"}));
      }
      
    • добавьте следующий код в global.asax

          routes.MapPageRoute(
            "FourthRoute",
            "Fourth/{Name}-{Gender}",
            "~/Fourth.aspx"
        );
      
    • создайте страницу Fourth.aspx со следующей загрузкой страницы:

      protected void Page_Load(object sender, EventArgs e)
      {
      Response.Write("Name is: " + RouteData.Values["Name"] + " and Gender is " + RouteData.Values["Gender"]);
      }