http://fullstackprep.dev/articles/webd/netcore/explain-middleware-in-aspnet-core