What are the differences between ConfigureServices() and Configure() in ASP.NET Core?

The documentation on docs.microsoft.com states the following:

Use ConfigureServices method to add services to the container.

Use Configure method to configure the HTTP request pipeline.

Can someone explain with simple examples, what is meant by adding services to container and what is meant by configuring HTTP request pipeline?


In a nutshell:

ConfigureServices is used to configure Dependency Injection

public void ConfigureServices(IServiceCollection services)
{
    // register MVC services
    services.AddMvc();

    // register configuration
    services.Configure<AppConfiguration>(Configuration.GetSection("RestCalls")); 

    // register custom services
    services.AddScoped<IUserService, UserService>();
    ...
}

Configure is used to set up middlewares, routing rules, etc

public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    // configure middlewares
    app.UseMiddleware<RequestResponseLoggingMiddleware>();
    app.UseMiddleware<ExceptionHandleMiddleware>();

    app.UseStaticFiles();

    // setup routing
    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "Default",
            template: "{controller}/{action}/{id}",
            defaults: new { controller = "Home", action = "Index", id = 1 });

    });
}

Read ASP.NET Core fundamentals to understand how it works in details.


Items in ConfigureServices are part of Dependency Injection like logger, Database etc. These kind of things aren't directly associated with a http request.

Items in configure are part of a http request like routing, mididlewares, static files all these triggers directly when user makes a request.