Master technical and career interviews with structured answers—short definition, real examples, pitfalls, and how to answer in 60–90 seconds.
Short answer: Mistake Fix Doing authentication inside action filters Use authorization filters Performing heavy logic Move to middleware Not registering filters as services Use DI for maintainability Returning inconsiste…
Short answer: pp.Run(async ctx => { wait ctx.Response.WriteAsync("This ends the pipeline"); }); pp.Run(async ctx => { wait ctx.Response.WriteAsync("This ends the pipeline"); }); pp.Run(async ctx…
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: Caching expensive requests where model binding is unnecessary. Real-world example (ShopNest) A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for ever…
Short answer: Dependency Injection (DI) is a design pattern that allows you to inject dependencies (services) into classes instead of hard-coding them. Real-world example (ShopNest) ShopNest registers AppDbContext as Sco…
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: Used for filters that require custom instantiation logic. Real-world example (ShopNest) A ShopNest ValidateModelAttribute runs before actions and returns 400 if ModelState is invalid—same rule for every con…
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-…
ASP.NET Core ASP.NET Core Tutorial · ASP.NET Core
Short answer: Mistake Fix Doing authentication inside action filters Use authorization filters Performing heavy logic Move to middleware Not registering filters as services Use DI for maintainability Returning inconsistent error messages Handle errors via global exception filter
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: pp.Run(async ctx => { wait ctx.Response.WriteAsync("This ends the pipeline"); }); pp.Run(async ctx => { wait ctx.Response.WriteAsync("This ends the pipeline"); }); pp.Run(async ctx => { wait ctx.Response.WriteAsync("This ends the pipeline"); }); pp.Run(async ctx => { wait ctx.Response.WriteAsync("This ends the 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: 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: Caching expensive requests where model binding is unnecessary.
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: Dependency Injection (DI) is a design pattern that allows you to inject dependencies (services) into classes instead of hard-coding them.
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: 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: Used for filters that require custom instantiation logic.
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: 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.