Master technical and career interviews with structured answers—short definition, real examples, pitfalls, and how to answer in 60–90 seconds.
Short answer: middleware Type Description Terminal Ends the pipeline. Doesn’t call next(). E.g., app.Run() Non-Termi nal Calls next() and allows other middlewares to run after it. E.g., app.Use() Terminal middleware: app…
Short answer: Yes—action filters have full access to ActionArguments. Real-world example (ShopNest) ShopNest registers AppDbContext as Scoped and IMemoryCache as Singleton. Putting DbContext in a Singleton causes threadi…
Short answer: app.UseAuthentication(); // Validates user identity app.UseAuthorization(); // Applies policies/roles Order matters: must be after routing but before endpoints. app.UseRouting(); app.UseAuthentication(); ap…
Short answer: Filters provide clean, reusable cross-cutting logic for MVC pipelines. Use the right filter type for the right stage. Prefer middleware when you don’t need controller context. Exception filters are best for…
Short answer: Exception filters only catch exceptions from MVC actions; middleware catches exceptions from the entire pipeline. Real-world example (ShopNest) ShopNest pipeline order matters: exception handling → HTTPS →…
Short answer: pp.UseCors("MyPolicy"); Must be placed before routing/endpoints. pp.UseCors("MyPolicy"); Must be placed before routing/endpoints. pp.UseCors("MyPolicy"); Must be placed before…
Short answer: builder.Services.AddCors(options => { options.AddPolicy("MyPolicy", policy => { policy.WithOrigins(" .AllowAnyHeader() .AllowAnyMethod(); }); }); app.UseCors("MyPolicy"); Must…
Short answer: Use: services.AddControllers(options => { options.Filters.Add(typeof(AuditLogFilter)); }); Advanced Level Example code Use: services.AddControllers(options => { options.Filters.Add(typeof(AuditLogFilt…
Short answer: wait _next(context); sw.Stop(); Console.WriteLine($"Request took {sw.ElapsedMilliseconds} ms"); } } Register: pp.UseMiddleware<TimingMiddleware>(); Dependency Injection (DI) wait _next(conte…
Short answer: execution time) Example custom middleware to measure time: public class TimingMiddleware Example code { private readonly RequestDelegate _next; public TimingMiddleware(RequestDelegate next) => _next = ne…
Short answer: Filters specifically built for Minimal APIs (introduced in ASP.NET Core 7). Real-world example (ShopNest) A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same…
Short answer: ✅ Capabilities: Constructor injection Lifetime management (Transient, Scoped, Singleton) Supports IEnumerable<T>, IServiceProvider, and open generics ⚠ Limitations: No support for named registrations…
Short answer: Lifetime Description Use Case Example Transient New instance every time Lightweight stateless services Scoped One instance per request Database context, UoW Singleto One instance for the app's lifetime Logg…
Short answer: Lower order executes first on entry but last on exit—like nested layers. Real-world example (ShopNest) A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rul…
Short answer: public void ConfigureServices(IServiceCollection services) { services.AddTransient<IMyService, MyService>(); services.AddScoped<IRepository, Repository>(); services.AddSingleton<ILoggerServic…
Short answer: Use a mocked HttpContext and assert on changes. Real-world example (ShopNest) ShopNest registers AppDbContext as Scoped and IMemoryCache as Singleton. Putting DbContext in a Singleton causes threading bugs.…
Short answer: Controllers: Constructor injection Razor Pages: Constructor injection in PageModel Middleware: Inject via constructor or use IApplicationBuilder.ApplicationServices Real-world example (ShopNest) ShopNest pi…
Short answer: Use [SkipFilter] custom attribute or exclude via filter predicates. Real-world example (ShopNest) A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for…
Short answer: Constructor Injection: Supported and preferred in ASP.NET Core. Property Injection: Not supported natively in built-in DI; can be achieved via custom logic or 3rd-party containers. ✅ Use constructor injecti…
Short answer: No. But middleware can replace some filter use cases. Say this in the interview Define — one clear sentence (the short answer above). Example — relate it to a project like ShopNest or your real work. Trade-…
Short answer: IServiceProvider: Resolves services manually. IServiceScopeFactory: Creates a new DI scope (useful for background tasks). using (var scope = serviceScopeFactory.CreateScope()) Example code { var scopedServi…
Short answer: Middleware logs incoming requests; action filter logs controller-level execution. Real-world example (ShopNest) ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints…
Short answer: Scoped services are tied to the HTTP request lifecycle. In background tasks, you must manually create a scope using IServiceScopeFactory to resolve scoped services safely. Real-world example (ShopNest) Shop…
Short answer: Mixing sync &amp; async can cause deadlocks. Prefer async filters. Real-world example (ShopNest) A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule…
Short answer: To replace: services.AddSingleton<IService, CustomImplementation>(); To remove: var descriptor = services.First(x => x.ServiceType == typeof(IMyService)); services.Remove(descriptor); Real-world ex…
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: middleware Type Description Terminal Ends the pipeline. Doesn’t call next(). E.g., app.Run() Non-Termi nal Calls next() and allows other middlewares to run after it. E.g., app.Use() Terminal middleware: app.Run(async ctx => { await ctx.Response.WriteAsync("This ends the pipeline"); });
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Yes—action filters have full access to ActionArguments.
ShopNest registers AppDbContext as Scoped and IMemoryCache as Singleton. Putting DbContext in a Singleton causes threading bugs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: app.UseAuthentication(); // Validates user identity app.UseAuthorization(); // Applies policies/roles Order matters: must be after routing but before endpoints. app.UseRouting(); app.UseAuthentication(); app.UseAuthorization(); app.UseEndpoints(...);
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Filters provide clean, reusable cross-cutting logic for MVC pipelines. Use the right filter type for the right stage. Prefer middleware when you don’t need controller context. Exception filters are best for consistent error handling. Use DI for scalable, clean, testable filter implementations. Filters shine in enterprise applications: auditing, authorization, and response shaping.
A ShopNest checkout request flows through middleware, hits a minimal API or controller, uses scoped services, and returns ProblemDetails on errors.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Exception filters only catch exceptions from MVC actions; middleware catches exceptions from the entire pipeline.
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: pp.UseCors("MyPolicy"); Must be placed before routing/endpoints. pp.UseCors("MyPolicy"); Must be placed before routing/endpoints. pp.UseCors("MyPolicy"); Must be placed before routing/endpoints. pp.UseCors("MyPolicy"); Must be placed before routing/endpoints.
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: builder.Services.AddCors(options => { options.AddPolicy("MyPolicy", policy => { policy.WithOrigins(" .AllowAnyHeader() .AllowAnyMethod(); }); }); app.UseCors("MyPolicy"); Must be placed before routing/endpoints.
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Use: services.AddControllers(options => { options.Filters.Add(typeof(AuditLogFilter)); }); Advanced Level
Use: services.AddControllers(options => { options.Filters.Add(typeof(AuditLogFilter)); }); Advanced Level
A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for every controller.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: wait _next(context); sw.Stop(); Console.WriteLine($"Request took {sw.ElapsedMilliseconds} ms"); } } Register: pp.UseMiddleware<TimingMiddleware>(); Dependency Injection (DI) wait _next(context); sw.Stop(); Console.WriteLine($"Request took {sw.ElapsedMilliseconds} ms"); } } Register: pp.UseMiddleware<TimingMiddleware>(); Dependency… Injection (DI) wait… _next(context); sw.Stop(); Console.WriteLine($"Request took…
{sw.ElapsedMilliseconds} ms"); } } Register: pp.UseMiddleware<TimingMiddleware>(); Dependency Injection (DI) wait _next(context); sw.Stop(); Console.WriteLine($"Request took {sw.ElapsedMilliseconds} ms"); } } Register: pp.UseMiddleware<TimingMiddleware>(); Dependency… Injection (DI)
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: execution time) Example custom middleware to measure time: public class TimingMiddleware
{
private readonly RequestDelegate _next;
public TimingMiddleware(RequestDelegate next) => _next = next; public async Task InvokeAsync(HttpContext context)
{
var sw = Stopwatch.StartNew();
await _next(context); sw.Stop(); Console.WriteLine($"Request took {sw.ElapsedMilliseconds} ms"); }
} Register: app.UseMiddleware<TimingMiddleware>(); Dependency Injection (DI)
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Filters specifically built for Minimal APIs (introduced in ASP.NET Core 7).
A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for every controller.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: ✅ Capabilities: Constructor injection Lifetime management (Transient, Scoped, Singleton) Supports IEnumerable<T>, IServiceProvider, and open generics ⚠ Limitations: No support for named registrations Limited property injection Basic feature set compared to Autofac or other 3rd-party containers
ShopNest registers AppDbContext as Scoped and IMemoryCache as Singleton. Putting DbContext in a Singleton causes threading bugs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Lifetime Description Use Case Example Transient New instance every time Lightweight stateless services Scoped One instance per request Database context, UoW Singleto One instance for the app's lifetime Logging, Config access
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Lower order executes first on entry but last on exit—like nested layers.
A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for every controller.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: public void ConfigureServices(IServiceCollection services) { services.AddTransient<IMyService, MyService>(); services.AddScoped<IRepository, Repository>(); services.AddSingleton<ILoggerService, LoggerService>(); }
public void ConfigureServices(IServiceCollection services)
{ services.AddTransient<IMyService, MyService>(); services.AddScoped<IRepository, Repository>(); services.AddSingleton<ILoggerService, LoggerService>(); }
A ShopNest checkout request flows through middleware, hits a minimal API or controller, uses scoped services, and returns ProblemDetails on errors.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Use a mocked HttpContext and assert on changes.
ShopNest registers AppDbContext as Scoped and IMemoryCache as Singleton. Putting DbContext in a Singleton causes threading bugs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Controllers: Constructor injection Razor Pages: Constructor injection in PageModel Middleware: Inject via constructor or use IApplicationBuilder.ApplicationServices
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Use [SkipFilter] custom attribute or exclude via filter predicates.
A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for every controller.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Constructor Injection: Supported and preferred in ASP.NET Core. Property Injection: Not supported natively in built-in DI; can be achieved via custom logic or 3rd-party containers. ✅ Use constructor injection for immutability and clarity.
Constructor Injection: Supported and preferred in ASP.NET Core. Property Injection: Not supported natively in built-in DI; can be achieved via custom logic or 3rd-party containers. ✅ Use constructor injection for immutability and clarity.
A ShopNest checkout request flows through middleware, hits a minimal API or controller, uses scoped services, and returns ProblemDetails on errors.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: No. But middleware can replace some filter use cases.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: IServiceProvider: Resolves services manually. IServiceScopeFactory: Creates a new DI scope (useful for background tasks). using (var scope = serviceScopeFactory.CreateScope())
{
var scopedService = scope.ServiceProvider.GetRequiredService<IMyScopedService>(); }
A ShopNest checkout request flows through middleware, hits a minimal API or controller, uses scoped services, and returns ProblemDetails on errors.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Middleware logs incoming requests; action filter logs controller-level execution.
ShopNest pipeline order matters: exception handling → HTTPS → auth → authorization → endpoints. Auth must run before protected APIs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Scoped services are tied to the HTTP request lifecycle. In background tasks, you must manually create a scope using IServiceScopeFactory to resolve scoped services safely.
ShopNest registers AppDbContext as Scoped and IMemoryCache as Singleton. Putting DbContext in a Singleton causes threading bugs.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Mixing sync & async can cause deadlocks. Prefer async filters.
A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for every controller.
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: To replace: services.AddSingleton<IService, CustomImplementation>(); To remove: var descriptor = services.First(x => x.ServiceType == typeof(IMyService)); services.Remove(descriptor);
ShopNest registers AppDbContext as Scoped and IMemoryCache as Singleton. Putting DbContext in a Singleton causes threading bugs.