ASP.NET Core Application Model
An ASP.NET Core application is a console application that contains a web server that serves as the entry point for a request. Microsoft provides, by default, a cross-platform web server called Kestrel. By adding an ASP.NET Core web server to your .NET Core app, your application can run as a web application. ASP.NET Core is composed of many small libraries that you can choose from to provide your application with different features. Some of the libraries are common and will appear in virtually every application you create, such as the ones for reading configuration files or performing logging. Other libraries build on top of these base capabilities to provide application-specific functionality, such as third-party logging-in via Facebook or Google.
ASP.NET Core application can act as the server-side application for a variety of different clients: it can serve HTML pages for traditional web applications, it can act as a REST API for client-side SPA applications, or it can act as an ad-hoc RPC service for client applications.
In a traditional web application built on ASP.NET, IIS is tightly coupled with the application and calls into specific points of your application.
When you build a web application with ASP.NET Core, browsers will still be using the same HTTP protocol to communicate with your application. The request process starts when a user’s browser sends an HTTP request to the server. A reverse-proxy server captures the request, before passing it to your application. In Windows, the reverse-proxy server will typically be IIS, and on Linux or macOS it might be NGINX or Apache. The request is forwarded from the reverse proxy to your ASP.NET Core web application. ASP.NET Core web application itself encompasses everything that takes place on the server to handle a request, including verifying the request is valid, handling login details, and generating HTML.