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

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.