Gyakorlat – Egyéni köztes szoftver létrehozása
A fejlesztők egyéni köztes szoftverösszetevőket hozhatnak létre, hogy funkciókat adjanak egy ASP.NET Core-alkalmazáshoz. Az egyéni köztes szoftver bárhol beilleszthető a köztes szoftver folyamatba, és beépített köztes szoftverösszetevőkkel is használható, ahogyan az ebben a példában látható:
Egy diagram, amely bemutatja, hogyan halad át a kérelem a folyamaton.
A vállalat hálózati üzemeltetési csapata az éles környezetben felmerülő teljesítményproblémákat hárítja el. A csapatvezető arra bízta, hogy implementáljon néhány funkciót az alkalmazás valós idejű monitorozásának jobb támogatása érdekében. Az alkalmazásnak naplóznia kell a kérelem részleteit a konzolon. Minden kéréshez naplóznia kell a kérelem metódusát, elérési útját és válaszállapot-kódját.
Ebben a gyakorlatban létrehoz egy egyéni köztes szoftverösszetevőt, amely naplózza a részleteket a konzolon.
Egyéni köztes szoftver hozzáadása
Módosítsuk a meglévő ASP.NET Core-alkalmazást úgy, hogy olyan egyéni köztes szoftver szerepeljen, amely naplózza a kérés részleteit a konzolon.
Nyissa meg a Program.cs fájlt, ha még nincs megnyitva.
Közvetlenül előtte
app.Run()szúrja be a következő kódot:app.Use(async (context, next) => { Console.WriteLine($"{context.Request.Method} {context.Request.Path} {context.Response.StatusCode}"); await next(); });A fenti kód a következőket végzi el:
-
app.Use()Egyéni köztes szoftverösszetevőt ad hozzá a folyamathoz. Az összetevő paraméterként egyHttpContextobjektumot és egyRequestDelegateobjektumot vesz fel. - A meghatalmazott a kérelem metódusát, elérési útját és válaszállapot-kódját írja a konzolra.
-
await next()meghívja a folyamat következő köztesszoftver-összetevőjét.
-
A módosítások tesztelése
Az alkalmazás újraépítéséhez és újraindításához nyomja le a Ctrl+Shift+F5 billentyűkombinációt.
Amikor megnyílik a böngészőablak, vegye figyelembe, hogy a gyökér URL-címe "Üdvözli a Contoso!"
Adja hozzá
/historyaz URL-címet, és nyomja le az Enter billentyűt. A böngésző átirányítja a/aboutlapot.A Visual Studio Code-ban nyomja le a Ctrl+Shift+P billentyűkombinációt a parancskatalógus megnyitásához. Keresse meg és válassza a Hibakeresési konzol: Fókusz a Hibakeresési konzol nézetre az alsó panel Hibakeresési konzol lapjára való váltáshoz. Jegyezze fel a következő sorokat:
GET / 200 GET /about 200A konzol kimenete az egyes kérések kérési metódusát, elérési útját és válaszállapot-kódját jeleníti meg. Az első sor a gyökér URL-cím kérését, a második sorban pedig az oldal kérését
/aboutjeleníti meg.Feljegyzés
Előfordulhat, hogy a böngésző is kér
/favicon.ico. Ez egy szabványos kérés egy webhely faviconjához, és figyelmen kívül hagyható.Hagyja futni az alkalmazást a következő gyakorlatban.
Köztes szoftver sorrendjének módosítása
Úgy tűnik, hogy az alkalmazás működik, de probléma van. Kérte a /history lapot, de a konzol kimenete nem jelenik meg. Ennek a viselkedésnek az az oka, hogy a kérelem részleteit naplózó egyéni köztes szoftverösszetevő az URL-újraíró köztes szoftver után lett hozzáadva. Az URL-újraíró köztes szoftver átirányítja a kéréseket /history/about , és elküldi a választ, és az egyéni köztes szoftver összetevő nem látja a kérést. Javítsuk ki ezt.
Helyezze át közvetlenül a
app.Use()sor elé aapp.UseRewriter()hozzáadott sort.A teljes Program.cs fájlnak így kell kinéznie:
using Microsoft.AspNetCore.Rewrite; var builder = WebApplication.CreateBuilder(args); var app = builder.Build(); app.Use(async (context, next) => { Console.WriteLine($"{context.Request.Method} {context.Request.Path} {context.Response.StatusCode}"); await next(); }); app.UseRewriter(new RewriteOptions().AddRedirect("history", "about")); app.MapGet("/", () => "Hello World!"); app.MapGet("/about", () => "Contoso was founded in 2000."); app.Run();Most hozzáadja az egyéni köztes szoftver összetevőt az URL-újraíró köztes szoftver előtt. Az egyéni köztes szoftver összetevő naplózza a kérés részleteit, mielőtt az URL-író köztes szoftver feldolgozza a kérést, és átirányítja azt.
Indítsa újra az alkalmazást, és tesztelje a korábbiakhoz hasonlóan. Ezúttal a Hibakeresési konzol kimenetének tartalmaznia kell a
/historyoldal kérését.GET / 200 GET /history 200 GET /about 200A konzol kimenete most már a lapra való átirányítás előtt megjeleníti a
/historylapra vonatkozó kérést/about.
Az állapotkód javítása
Az alkalmazás majdnem készen áll, de van még egy probléma. A konzol kimenetében lévő állapotkód mindig 200, még akkor is, ha az alkalmazás átirányítja a kérést. A kérés állapotkódjának /history 302-nek kell lennie. Ennek a viselkedésnek az oka egy másik megrendelési probléma, amelyben a köztes szoftver összetevőinek feldolgozása történik.
Az egyéni köztes szoftver összetevő naplózza a részleteket a konzolon, majd meghívja await next() , hogy adja át a következő köztes szoftverösszetevőnek. A probléma az, hogy az StatusCode objektum tulajdonsága akkor Response van beállítva, amikor a terminál köztes szoftver összetevő elindítja a választ. Módosítsuk a kódot, hogy kijavítsuk ezt.
A hozzáadott meghatalmazottban vigye a sort a
Console.WriteLine()await next()sor mögé.A frissített kódnak így kell kinéznie:
app.Use(async (context, next) => { await next(); Console.WriteLine($"{context.Request.Method} {context.Request.Path} {context.Response.StatusCode}"); });Most az egyéni köztes szoftver összetevő naplózza a kérés részleteit, miután a terminálközeli szoftver összetevő beállítja a válaszállapot-kódot.
Indítsa újra a kérést
/history, és tesztelje újra. A hibakeresési konzol kimenetének most már a megfelelő állapotkódot kell megjelenítenie.GET / 200 GET /history 302 GET /about 200