Zoals gezegd biedt Microsoft verschillende middleware-componenten voor ASP.NET Core die de meest voorkomende functies verwerken vereist door webapplicaties. U kunt ook uw eigen middleware maken, wat een handige manier is om te begrijpen hoe ASP.NET Core werkt, zelfs als u alleen de standaardcomponenten in uw projecten gebruikt. De belangrijkste methode voor het maken van middleware is Gebruik
De Use-methode registreert een middleware-component die doorgaans wordt uitgedrukt als een lambda-functie die elk verzoek ontvangt terwijl het door de pijplijn gaat (er wordt een andere methode gebruikt voor klassen, zoals beschreven in de volgende sectie).
De argumenten voor de lambda-functie zijn een HttpContext-object en een functie die wordt aangeroepen om ASP.NET Core te vertellen de verzoek naar de volgende middlewarecomponent in de pijplijn.
Het HttpContext-object beschrijft het HTTP-verzoek en het HTTP-antwoord en biedt aanvullende context, inclusief details van de gebruiker die aan het verzoek is gekoppeld.
HttpContext Members
Connection :
Deze eigenschap retourneert een ConnectionInfo-object dat informatie biedt over de netwerkverbinding die ten grondslag liggen aan het HTTP-verzoek, inclusief details van lokale en externe IP-adressen en poorten.
Request :
Deze eigenschap retourneert een HttpRequest-object dat de HTTP-aanvraag beschrijft die wordt verwerkt.
RequestServices
Deze accommodatie biedt toegang tot de services die beschikbaar zijn voor de aanvraag.
Response
Deze eigenschap retourneert een HttpResponse-object dat wordt gebruikt om een antwoord op de HTTP-aanvraag te maken.
Session
Deze eigenschap retourneert de sessiegegevens die aan de aanvraag zijn gekoppeld.
User
Deze eigenschap retourneert de gebruiker die aan de aanvraag zijn gekoppeld.
Features
Deze eigenschap biedt toegang tot verzoekfuncties, die toegang geven tot de lagere aspecten van het verzoek afhandeling.
Het ASP.NET Core-platform is verantwoordelijk voor het verwerken van het HTTP-verzoek om het HttpRequest-object te maken, wat betekent dat Middleware en endpoints hoeven zich geen zorgen te maken over de ruwe aanvraaggegevens. Tabel hieronder geeft een overzicht van de meest bruikbare leden van de HttpRequest-klasse.
Naam | Omschrijving |
ContentLength | Deze eigenschap retourneert de waarde van de koptekst Inhoud-lengte. |
ContentType | Deze eigenschap retourneert de waarde van de koptekst Inhoudstype. |
Cookies | Deze eigenschap retourneert de aanvraagcookies |
Form | Deze eigenschap retourneert een weergave van de aanvraagtekst als een formulier. |
Headers | Deze eigenschap retourneert de aanvraagheaders. |
IsHttps | Deze eigenschap retourneert true als de aanvraag is gedaan met behulp van HTTPS. |
Method | Deze eigenschap retourneert het HTTP-werkwoord dat voor de aanvraag is gebruikt. |
Path | Deze eigenschap retourneert het padgedeelte van de aanvraag-URL. |
Query | Deze eigenschap retourneert de querytekenreekssectie van de aanvraag-URL als sleutel/waarde-paren. |
Body | Deze eigenschap retourneert een stroom die kan worden gebruikt om de hoofdtekst van de aanvraag te lezen. |
Het HttpResponse-object beschrijft het HTTP-antwoord dat wordt teruggestuurd naar de client wanneer de aanvraag zijn weg heeft gevonden door de pijpleiding. de Tabel hieronder beschrijft de nuttigste leden van de HttpResponse-klasse. Het ASP.NET Core-platform maakt het zo eenvoudig mogelijk afhandelen van reacties, stelt automatisch headers in en maakt het gemakkelijk om inhoud naar de klant te sturen.
Naam | Omschrijving |
Connection | Deze eigenschap retourneert een ConnectionInfo-object dat informatie geeft over de netwerkverbinding die ten grondslag liggen aan het HTTP-verzoek, inclusief details van lokale en externe IP-adressen en poorten. |
Request | Deze eigenschap retourneert een HttpRequest-object dat de HTTP-aanvraag beschrijft die wordt verwerkt. |
RequestServices | Deze eigenschap biedt toegang tot de services die beschikbaar zijn voor de aanvraag |
Response | Deze eigenschap retourneert een HttpResponse-object dat wordt gebruikt om een antwoord op de HTTP-aanvraag te maken. |
Session | Deze eigenschap retourneert de sessiegegevens die aan de aanvraag zijn gekoppeld. |
User | Deze eigenschap retourneert gegevens van de gebruiker die aan de aanvraag is gekoppeld |
Features | Deze eigenschap biedt toegang tot aanvraagfuncties, die toegang geven tot de low-level aspecten van de aanvraag behandeling. |
Het HttpResponse-object beschrijft het HTTP-antwoord dat wordt teruggestuurd naar de client wanneer de aanvraag zijn weg heeft gevonden door de pijpleiding. In de onderstaande tabel worden de nuttigste leden van de HttpResponse-klasse beschreven. Het ASP.NET Core-platform maakt het zo eenvoudig mogelijk afhandelen van reacties, stelt automatisch headers in en maakt het gemakkelijk om inhoud naar de klant te sturen.
Naam | Omschrijving |
ContentLength | Met deze eigenschap stelt u de waarde van de koptekst Content-Length in. |
ContentType | Met deze eigenschap stelt u de waarde van de koptekst Content-Type in. |
Cookies | Deze eigenschap maakt het mogelijk om cookies aan het verzoek te koppelen. |
HasStarted | Deze eigenschap retourneert true als ASP.NET Core is begonnen met het verzenden van de antwoordheaders naar de client, na waarvan het niet mogelijk is om wijzigingen aan te brengen. |
Headers | Met deze eigenschap kunnen de antwoordheaders worden ingesteld. |
StatusCode | Met deze eigenschap stelt u de statuscode voor het antwoord in. |
WriteAsync(data) | Met deze asynchrone methode wordt een gegevensreeks naar de hoofdtekst van het antwoord geschreven. |
Redirect(url) | Met deze methode wordt een omleidingsreactie verzonden. |
Bij het maken van aangepaste middleware worden de objecten HttpContext, HttpRequest en HttpResponse rechtstreeks gebruikt, maar dit is meestal niet vereist bij gebruik van ASP.NET Core-functies op een hoger niveau, zoals het MVC Framework en Razor-pagina’s.
De middleware-functie die ik heb gedefinieerd, gebruikt het HttpRequest-object om de HTTP-methode en de queryreeks te controleren identificeer GET-verzoeken die een aangepaste parameter in de querytekenreeks hebben waarvan de waarde waar is, zoals dit:
De klasse HttpMethods definieert statische string voor elke HTTP-methode. Voor GET-aanvragen met de verwachte querytekenreeks wordt de middleware-functie gebruikt de WriteAsync-methode om een string aan de body van de response toe te voegen.
Het tweede argument voor de middleware is de functie die gewoonlijk next wordt genoemd en die ASP.NET Core vertelt het verzoek door te geven naar de volgende component in de request pipeline.
Er zijn geen argumenten vereist bij het aanroepen van de volgende middlewarecomponent, omdat ASP.NET Core voor de levering zorgt de component met het HttpContext-object en zijn eigen next-functie, zodat deze het verzoek kan verwerken. De volgende functie is asynchroon, daarom wordt het trefwoord await gebruikt en waarom de lambda-functie is gedefinieerd met het trefwoord async.
Start ASP.NET Core opnieuw en navigeer naar http://localhost:5000/?custom=true. Je zult zien dat de nieuwe middleware functie voegt zijn bericht toe aan de antwoordtekst voordat het verzoek wordt doorgegeven aan de volgende middleware-component, zoals hier wordt weergegeven onder Verwijder de queryreeks, of wijzig true in false, en de middleware-component zal het verzoek doorgeven zonder
toevoegen aan de reactie.
Middleware definiëren met behulp van een klasse.
Het definiëren van middleware met behulp van lambda-functies is handig, maar kan leiden tot een lange en complexe configuratiemethode in het opstartproces. Class en maakt het moeilijk om middleware in verschillende projecten te hergebruiken. Middleware kan ook worden gedefinieerd met behulp van klassen. Voeg een klassenbestand toe met de naam Middleware.cs naar de map Platform en voeg de code toe.
Middleware-klassen ontvangen een RequestDelegate als constructorparameter, die wordt gebruikt om het verzoek door te sturen naar de volgende component in de pijplijn. De Invoke-methode wordt aangeroepen door ASP.NET Core wanneer een aanvraag wordt ontvangen en een HttpContext ontvangt
object dat toegang biedt tot het verzoek en het antwoord, met behulp van dezelfde klassen die de middleware voor de lambda-functie ontvangt. De
RequestDelegate retourneert een taak, waardoor deze asynchroon kan werken.
Een belangrijk verschil in op klassen gebaseerde middleware is dat het HttpContext-object als argument moet worden gebruikt wanneer het aanroepen van de RequestDelete om het verzoek als volgt door te sturen:
Op klassen gebaseerde middleware-componenten worden aan de pijplijn toegevoegd met de UseMiddleware-methode, die de middleware accepteert als type argument.
Startup.cs