Gyakorlat – Egyéni köztes szoftver létrehozása

Befejeződött

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.

  1. Nyissa meg a Program.cs fájlt, ha még nincs megnyitva.

  2. 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 egy HttpContext objektumot és egy RequestDelegate objektumot 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

  1. Az alkalmazás újraépítéséhez és újraindításához nyomja le a Ctrl+Shift+F5 billentyűkombinációt.

  2. Amikor megnyílik a böngészőablak, vegye figyelembe, hogy a gyökér URL-címe "Üdvözli a Contoso!"

  3. Adja hozzá /history az URL-címet, és nyomja le az Enter billentyűt. A böngésző átirányítja a /about lapot.

  4. 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 200
    

    A 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 /about jelení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ó.

  5. 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.

  1. Helyezze át közvetlenül a app.Use() sor elé a app.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.

  2. Indítsa újra az alkalmazást, és tesztelje a korábbiakhoz hasonlóan. Ezúttal a Hibakeresési konzol kimenetének tartalmaznia kell a /history oldal kérését.

    GET / 200
    GET /history 200
    GET /about 200
    

    A konzol kimenete most már a lapra való átirányítás előtt megjeleníti a /history lapra 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.

  1. 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.

  2. 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