web-dev-qa-db-fra.com

Middleware ASP.NET Core ou middleware OWIN?

Si je comprends bien, ASP.NET Core prend en charge le middleware OWIN (via app.UseOwin()) en plus de son propre middleware natif.

Quelle est la différence entre le middleware ASP.NET Core et le middleware OWIN?

Lors de la conception d'un nouveau middleware, comment savoir si je dois le concevoir en tant que middleware ASP.NET Core ou middleware OWIN?

23
Fred

Votre question m'a rendu curieux et je voudrais partager ce que j'ai appris jusqu'à présent.

Katana est l'implémentation de la spécification OWIN. Après la version 3.0 de Katana, cette technologie a été pleinement intégrée dans la pile Web que nous connaissons aujourd'hui sous le nom d'ASP.NET Core.

Bien que cette transition soit restée similaire aux spécifications OWIN. Bien que certains changements aient été apportés. Afin d'utiliser le middleware OWIN existant dans ASP.NET Core, OWIN est pris en charge par une fonctionnalité facultative ("app.UseOwin()").

Si vous souhaitez cibler avec vos applications middleware ASP.NET et les applications principales ASP.NET, alors j'utiliserais le middleware OWIN. Si vous souhaitez donner aux développeurs ASP.NET Core une expérience citoyenne de première classe, un middleware ASP.NET Core serait reconnu comme plus "adapté".

Quelques informations sur la relation entre le middleware ASP.NET Core et le middleware OWIN peuvent être trouvées ici:

18
Ralf Bönning

J'en suis venu à le comprendre comme ceci; Le middleware ASP.NET Core est à un niveau supérieur au middleware OWIN qui est à un niveau inférieur.

Le middleware ASP.NET Core a l'avantage qu'il est beaucoup plus facile de développer un middleware en passant dans le HttpContext que vous pouvez utiliser. L'inconvénient est que le middleware que vous développez dépend d'ASP.NET Core.

OWIN est à un niveau inférieur et vous obtenez un environnement OWIN qui est un IDictionary<string, object>. L'avantage est qu'il n'est pas lié à ASP.NET et peut donc s'exécuter sur n'importe quel serveur OWIN (tel que Nowin). L'inconvénient est qu'il faut plus d'efforts pour coder car vous devez créer votre propre contexte à partir de l'environnement OWIN ou utiliser directement le dictionnaire d'environnement OWIN et garder une trace de tous les clés OWIN et des objets.

Edit: Vous n'avez pas besoin de suivre vous-même les clés OWIN, vous pouvez utiliser la classe OwinEnvironment pour obtenir un environnement fortement typé.

var environment = new OwinEnvironment(HttpContext);
var features = new OwinFeatureCollection(environment);
3
Fred