Směrování adresy URL
Stáhnout ukázkový projekt Wingtip Toys (C#) nebo Stáhnout elektronickou knihu (PDF)
Tato série kurzů vás naučí základy vytváření ASP.NET Web Forms aplikace pomocí ASP.NET 4.5 a Microsoft Visual Studio Express 2013 pro web. K dispozici je Visual Studio 2013 projekt se zdrojovým kódem jazyka C#, který bude doprovázet tuto sérii kurzů.
V tomto kurzu upravíte ukázkovou aplikaci Wingtip Toys tak, aby podporovala směrování adres URL. Směrování umožňuje webové aplikaci používat adresy URL, které jsou přívětivější, snadněji zapamatovatelné a lépe podporované vyhledávacími weby. Tento kurz vychází z předchozího kurzu Členství a správa a je součástí série kurzů Wingtip Toys.
Naučíte se:
- Postup registrace tras pro aplikaci ASP.NET Web Forms
- Postup přidání tras na webovou stránku
- Jak vybrat data z databáze pro podporu tras.
přehled směrování ASP.NET
Směrování adres URL umožňuje nakonfigurovat aplikaci tak, aby přijímala adresy URL požadavků, které se nemapují na fyzické soubory. Adresa URL požadavku je jednoduše adresa URL, která uživatel zadá do prohlížeče, aby našel stránku na vašem webu. Směrování slouží k definování adres URL, které jsou pro uživatele sémanticky smysluplné a které můžou pomoct s optimalizací pro vyhledávací weby (SEO).
Šablona Web Forms ve výchozím nastavení obsahuje popisné adresy URL ASP.NET. Většina základní práce se směrováním bude implementována pomocí popisných adres URL. V tomto kurzu ale přidáte přizpůsobené možnosti směrování.
Před přizpůsobením směrování adres URL může ukázková aplikace Wingtip Toys odkazovat na produkt pomocí následující adresy URL:
https://localhost:44300/ProductDetails.aspx?productID=2
Přizpůsobením směrování adres URL bude ukázková aplikace Wingtip Toys odkazovat na stejný produkt pomocí snadněji čitelné adresy URL:
https://localhost:44300/Product/Convertible%20Car
Trasy
Trasa je vzor adresy URL, který se mapuje na obslužnou rutinu. Obslužnou rutinou může být fyzický soubor, například soubor .aspx v Web Forms aplikaci. Obslužná rutina může být také třída, která zpracovává požadavek. Chcete-li definovat trasu, vytvoříte instanci třídy Route zadáním vzoru adresy URL, obslužné rutiny a volitelně názvu trasy.
Trasu přidáte do aplikace přidáním objektu Route
do statické Routes
vlastnosti RouteTable
třídy. Routes Vlastnost je RouteCollection
objekt, který ukládá všechny trasy pro aplikaci.
Vzory adres URL
Vzor adresy URL může obsahovat hodnoty literálů a zástupné symboly proměnných (označované jako parametry adresy URL). Literály a zástupné symboly se nacházejí v segmentech adresy URL, které jsou oddělené znakem lomítka (/
).
Při vytvoření požadavku na webovou aplikaci se adresa URL analyzuje na segmenty a zástupné symboly a obslužné rutině požadavku se poskytnou hodnoty proměnných. Tento proces se podobá způsobu, jakým se data v řetězci dotazu analyzují a předávají obslužné rutině požadavku. V obou případech jsou informace o proměnných zahrnuty do adresy URL a předány obslužné rutině ve formě párů klíč-hodnota. Pro řetězce dotazu jsou klíče i hodnoty v adrese URL. U tras jsou klíče zástupnými názvy definovanými ve vzoru adresy URL a v adrese URL jsou pouze hodnoty.
Ve vzoru adresy URL definujete zástupné symboly tak, že je uzavřete do závorek ( {
a }
). V segmentu můžete definovat více zástupných symbolů, ale zástupné symboly musí být oddělené hodnotou literálu. Jedná se {language}-{country}/{action}
například o platný vzor trasy. {language}{country}/{action}
Nejedná se však o platný vzor, protože mezi zástupnými symboly neexistuje žádná hodnota literálu ani oddělovač. Směrování proto nemůže určit, kde se má oddělit hodnota zástupného symbolu jazyka od hodnoty zástupného symbolu země.
Mapování a registrace tras
Než budete moct zahrnout trasy na stránky ukázkové aplikace Wingtip Toys, musíte je při spuštění aplikace zaregistrovat. Pokud chcete zaregistrovat trasy, upravíte obslužnou rutinu Application_Start
události.
V Průzkumník řešení o sadě Visual Studio vyhledejte a otevřete soubor Global.asax.cs.
Přidejte žlutě zvýrazněný kód do souboru Global.asax.cs následujícím způsobem:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Optimization; using System.Web.Routing; using System.Web.Security; using System.Web.SessionState; using System.Data.Entity; using WingtipToys.Models; using WingtipToys.Logic; namespace WingtipToys { public class Global : HttpApplication { void Application_Start(object sender, EventArgs e) { // Code that runs on application startup RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); // Initialize the product database. Database.SetInitializer(new ProductDatabaseInitializer()); // Create custom role and user. RoleActions roleActions = new RoleActions(); roleActions.AddUserAndRole(); // Add Routes. RegisterCustomRoutes(RouteTable.Routes); } void RegisterCustomRoutes(RouteCollection routes) { routes.MapPageRoute( "ProductsByCategoryRoute", "Category/{categoryName}", "~/ProductList.aspx" ); routes.MapPageRoute( "ProductByNameRoute", "Product/{productName}", "~/ProductDetails.aspx" ); } } }
Při spuštění ukázkové aplikace Wingtip Toys volá obslužnou rutinu Application_Start
události. Na konci této obslužné rutiny RegisterCustomRoutes
události je volána metoda. Metoda RegisterCustomRoutes
přidá každou trasu MapPageRoute
voláním metody objektu RouteCollection
. Trasy se definují pomocí názvu trasy, adresy URL trasy a fyzické adresy URL.
První parametr ("ProductsByCategoryRoute
") je název trasy. Používá se k volání trasy, když je potřeba. Druhý parametr ("")Category/{categoryName}
definuje popisnou náhradní adresu URL, která může být dynamická na základě kódu. Tuto trasu použijete, když naplňujete ovládací prvek dat odkazy, které jsou generovány na základě dat. Trasa se zobrazí takto:
routes.MapPageRoute(
"ProductsByCategoryRoute",
"Category/{categoryName}",
"~/ProductList.aspx"
);
Druhý parametr trasy obsahuje dynamickou hodnotu určenou pomocí závorek ({ }
). V tomto případě je proměnná, categoryName
která se použije k určení správné cesty směrování.
Poznámka
Volitelné
Správa kódu může být jednodušší, když přesunete metodu RegisterCustomRoutes
do samostatné třídy. Ve složce Logika vytvořte samostatnou RouteActions
třídu. Přesuňte výše uvedenou RegisterCustomRoutes
metodu ze souboru Global.asax.cs do nové RoutesActions
třídy. RoleActions
Jako příklad RegisterCustomRoutes
volání metody ze souboru Global.asax.cs použijte třídu a createAdmin
metodu.
Možná jste si také všimli RegisterRoutes
volání metody pomocí objektu RouteConfig
na začátku obslužné rutiny Application_Start
události. Toto volání je provedeno k implementaci výchozího směrování. Byl zahrnut jako výchozí kód, když jste vytvořili aplikaci pomocí šablony Web Forms sady Visual Studio.
Načítání a používání dat trasy
Jak je uvedeno výše, trasy je možné definovat. Kód, který jste přidali do obslužné Application_Start
rutiny události v souboru Global.asax.cs , načte definovatelné trasy.
Nastavení tras
Trasy vyžadují přidání dalšího kódu. V tomto kurzu použijete vazbu modelu k načtení objektu RouteValueDictionary
, který se používá při generování tras pomocí dat z datového ovládacího prvku. Objekt RouteValueDictionary
bude obsahovat seznam názvů produktů, které patří do určité kategorie produktů. Pro každý produkt se vytvoří odkaz na základě dat a trasy.
Povolení tras pro kategorie a produkty
Dále aplikaci aktualizujete tak, aby pomocí ProductsByCategoryRoute
příkazu určila správnou trasu, která se má zahrnout do odkazu na jednotlivé kategorie produktů. Aktualizujete také stránku ProductList.aspx tak, aby obsahovala směrovaný odkaz pro každý produkt. Odkazy se zobrazí tak, jak byly před změnou, ale odkazy teď budou používat směrování adresy URL.
V Průzkumník řešení otevřete stránku Site.Master, pokud ještě není otevřená.
Aktualizujte ovládací prvek ListView s názvem "
categoryList
" se změnami zvýrazněnými žlutě, aby se značky zobrazily takto:<asp:ListView ID="categoryList" ItemType="WingtipToys.Models.Category" runat="server" SelectMethod="GetCategories" > <ItemTemplate> <b style="font-size: large; font-style: normal"> <a href="<%#: GetRouteUrl("ProductsByCategoryRoute", new {categoryName = Item.CategoryName}) %>"> <%#: Item.CategoryName %> </a> </b> </ItemTemplate> <ItemSeparatorTemplate> | </ItemSeparatorTemplate> </asp:ListView>
V Průzkumník řešení otevřete stránku ProductList.aspx.
ItemTemplate
Aktualizujte prvek stránky ProductList.aspx se zvýrazněnými aktualizacemi žlutě, aby se revize zobrazila takto:<ItemTemplate> <td runat="server"> <table> <tr> <td> <a href="<%#: GetRouteUrl("ProductByNameRoute", new {productName = Item.ProductName}) %>"> <image src='/Catalog/Images/Thumbs/<%#:Item.ImagePath%>' width="100" height="75" border="1" /> </a> </td> </tr> <tr> <td> <a href="<%#: GetRouteUrl("ProductByNameRoute", new {productName = Item.ProductName}) %>"> <%#:Item.ProductName%> </a> <br /> <span> <b>Price: </b><%#:String.Format("{0:c}", Item.UnitPrice)%> </span> <br /> <a href="/AddToCart.aspx?productID=<%#:Item.ProductID %>"> <span class="ProductListItem"> <b>Add To Cart<b> </span> </a> </td> </tr> <tr> <td> </td> </tr> </table> </p> </td> </ItemTemplate>
Otevřete kód na pozadí souboru ProductList.aspx.cs a přidejte následující obor názvů zvýrazněný žlutě:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using WingtipToys.Models; using System.Web.ModelBinding; using System.Web.Routing;
Nahraďte metodu
GetProducts
kódu na pozadí (ProductList.aspx.cs) následujícím kódem:public IQueryable<Product> GetProducts( [QueryString("id")] int? categoryId, [RouteData] string categoryName) { var _db = new WingtipToys.Models.ProductContext(); IQueryable<Product> query = _db.Products; if (categoryId.HasValue && categoryId > 0) { query = query.Where(p => p.CategoryID == categoryId); } if (!String.IsNullOrEmpty(categoryName)) { query = query.Where(p => String.Compare(p.Category.CategoryName, categoryName) == 0); } return query; }
Přidání kódu pro podrobnosti o produktu
Teď aktualizujte kód na pozadí (ProductDetails.aspx.cs) pro stránku ProductDetails.aspx tak, aby používal data směrování. Všimněte si, že nová GetProduct
metoda přijímá také hodnotu řetězce dotazu v případě, že uživatel má odkaz označený záložkou, který používá starší neširovanou adresu URL.
Nahraďte metodu
GetProduct
kódu na pozadí (ProductDetails.aspx.cs) následujícím kódem:public IQueryable<Product> GetProduct( [QueryString("ProductID")] int? productId, [RouteData] string productName) { var _db = new WingtipToys.Models.ProductContext(); IQueryable<Product> query = _db.Products; if (productId.HasValue && productId > 0) { query = query.Where(p => p.ProductID == productId); } else if (!String.IsNullOrEmpty(productName)) { query = query.Where(p => String.Compare(p.ProductName, productName) == 0); } else { query = null; } return query; }
Spuštění aplikace
Aplikaci teď můžete spustit, abyste viděli aktualizované trasy.
- Stisknutím klávesy F5 spusťte ukázkovou aplikaci Wingtip Toys.
Otevře se prohlížeč a zobrazí stránku Default.aspx . - V horní části stránky klikněte na odkaz Produkty .
Všechny produkty se zobrazí na stránce ProductList.aspx . Pro prohlížeč se zobrazí následující adresa URL (s použitím čísla portu):
https://localhost:44300/ProductList
- Potom v horní části stránky klikněte na odkaz Kategorie Auta .
Na stránce ProductList.aspx se zobrazují jenom auta. Pro prohlížeč se zobrazí následující adresa URL (s použitím čísla portu):
https://localhost:44300/Category/Cars
- Kliknutím na odkaz obsahující název prvního vozu uvedeného na stránce ("Kabriolet") zobrazte podrobnosti o produktu.
Pro prohlížeč se zobrazí následující adresa URL (s použitím čísla portu):
https://localhost:44300/Product/Convertible%20Car
- Pak do prohlížeče zadejte následující nesměrovanou adresu URL (s použitím čísla portu):
https://localhost:44300/ProductDetails.aspx?productID=2
Kód stále rozpozná adresu URL, která obsahuje řetězec dotazu pro případ, že má uživatel odkaz v záložce.
Souhrn
V tomto kurzu jste přidali trasy pro kategorie a produkty. Dozvěděli jste se, jak lze trasy integrovat s ovládacími prvky dat, které používají vazby modelu. V dalším kurzu implementujete globální zpracování chyb.
Další materiály
ASP.NET popisné adresy URL
Nasazení aplikace Secure ASP.NET Web Forms s členstvím, OAuth a SQL Database do Azure App Service
Microsoft Azure – bezplatná zkušební verze