8.3 KiB
title | author | description | keywords | ms.author | manager | ms.date | ms.topic | ms.assetid | ms.technology | ms.prod | uid | ms.custom |
---|---|---|---|---|---|---|---|---|---|---|---|---|
ASP.NET Core fundamentals | rick-anderson | This article provides a high-level overview of the foundational concepts to be understood when building ASP.NET Core applications. | ASP.NET Core,fundamentals,overview | riande | wpickett | 08/18/2017 | get-started-article | a19b7836-63e4-44e8-8250-50d426dd1070 | aspnet | asp.net-core | fundamentals/index | H1Hack27Feb2017 |
ASP.NET Core fundamentals overview
An ASP.NET Core application is a console app that creates a web server in its Main
method:
ASP.NET Core 2.x
[!code-csharpMain]
The Main
method invokes WebHost.CreateDefaultBuilder
, which follows the builder pattern to create a web application host. The builder has methods that define the web server (for example, UseKestrel
) and the startup class (UseStartup
). In the preceding example, a Kestrel web server is automatically allocated. ASP.NET Core's web host will attempt to run on IIS, if it is available. Other web servers, such as HTTP.sys, can be used by invoking the appropriate extension method. UseStartup
is explained further in the next section.
IWebHostBuilder
, the return type of the WebHost.CreateDefaultBuilder
invocation, provides many optional methods. Some of these methods include UseHttpSys
for hosting the application in HTTP.sys, and UseContentRoot
for specifying the root content directory. The Build
and Run
methods build the IWebHost
object that will host the application and begin listening for HTTP requests.
ASP.NET Core 1.x
[!code-csharpMain]
The Main
method uses WebHostBuilder
, which follows the builder pattern to create a web application host. The builder has methods that define the web server (for example, UseKestrel
) and the startup class (UseStartup
). In the preceding example, the Kestrel web server is used. Other web servers, such as WebListener, can be used by invoking the appropriate extension method. UseStartup
is explained further in the next section.
WebHostBuilder
provides many optional methods, including UseIISIntegration
for hosting in IIS and IIS Express, and UseContentRoot
for specifying the root content directory. The Build
and Run
methods build the IWebHost
object that will host the application and begin listening for HTTP requests.
Startup
The UseStartup
method on WebHostBuilder
specifies the Startup
class for your app:
ASP.NET Core 2.x
[!code-csharpMain]
ASP.NET Core 1.x
[!code-csharpMain]
The Startup
class is where you define the request handling pipeline and where any services needed by the application are configured. The Startup
class must be public and contain the following methods:
public class Startup
{
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)
{
}
}
-
ConfigureServices
defines the Services used by your application (such as ASP.NET Core MVC, Entity Framework Core, Identity, etc.). -
Configure
defines the middleware in the request pipeline.
For more information, see Application startup.
Services
A service is a component that is intended for common consumption in an application. Services are made available through dependency injection (DI). ASP.NET Core includes a native inversion of control (IoC) container that supports constructor injection by default. The native container can be replaced with your container of choice. In addition to its loose coupling benefit, DI makes services available throughout your application. For example, logging is available throughout your application.
For more information, see Dependency injection.
Middleware
In ASP.NET Core, you compose your request pipeline using Middleware. ASP.NET Core middleware performs asynchronous logic on an HttpContext
and then either invokes the next middleware in the sequence or terminates the request directly. A middleware component called "XYZ" is added by invoking a UseXYZ
extension method in the Configure
method.
ASP.NET Core comes with a rich set of built-in middleware:
You can use any OWIN-based middleware with ASP.NET Core, and you can write your own custom middleware.
For more information, see Middleware and Open Web Interface for .NET (OWIN).
Servers
The ASP.NET Core hosting model does not directly listen for requests; rather, it relies on an HTTP server implementation to forward the request to the application. The forwarded request is wrapped as a set of feature objects that you can access through interfaces. The application composes this set into an HttpContext
. ASP.NET Core includes a managed, cross-platform web server, called Kestrel. Kestrel is typically run behind a production web server like IIS or nginx.
For more information, see Servers and Hosting.
Content root
The content root is the base path to any content used by the app, such as views, Razor Pages, and static assets. By default, the content root is the same as application base path for the executable hosting the application. An alternative location for content root is specified with WebHostBuilder
.
Web root
The web root of an application is the directory in the project containing public, static resources like CSS, JavaScript, and image files. By default, the static files middleware will only serve files from the web root directory and its sub-directories. See working with static files for more info. The web root path defaults to /wwwroot, but you can specify a different location using the WebHostBuilder
.
Configuration
ASP.NET Core uses a new configuration model for handling simple name-value pairs. The new configuration model is not based on System.Configuration
or web.config; rather, it pulls from an ordered set of configuration providers. The built-in configuration providers support a variety of file formats (XML, JSON, INI) and environment variables to enable environment-based configuration. You can also write your own custom configuration providers.
For more information, see Configuration.
Environments
Environments, like "Development" and "Production", are a first-class notion in ASP.NET Core and can be set using environment variables.
For more information, see Working with Multiple Environments.
.NET Core vs. .NET Framework runtime
An ASP.NET Core application can target the .NET Core or .NET Framework runtime. For more information, see Choosing between .NET Core and .NET Framework.
Additional information
See also the following topics: