| name | ln-772-error-handler-setup |
| description | Configures global exception handling middleware |
ln-772-error-handler-setup
Type: L3 Worker Category: 7XX Project Bootstrap Parent: ln-770-crosscutting-setup
Configures global error handling for .NET and Python backend applications.
Overview
| Aspect | Details |
|---|---|
| Input | Context Store from ln-770 |
| Output | Exception handling middleware and custom exceptions |
| Stacks | .NET (ASP.NET Core Middleware), Python (FastAPI exception handlers) |
Phase 1: Receive Context
Accept Context Store from coordinator.
Required Context:
STACK: .NET or PythonFRAMEWORK: ASP.NET Core or FastAPIPROJECT_ROOT: Project directory pathENVIRONMENT: Development or Production
Idempotency Check:
- .NET: Grep for
GlobalExceptionMiddlewareorUseExceptionHandler - Python: Grep for
@app.exception_handlerorexception_handlers.py - If found: Return
{ "status": "skipped" }
Phase 2: Research Error Handling Patterns
Use MCP tools to get up-to-date documentation.
For .NET:
MCP ref: "ASP.NET Core global exception handling middleware"
Context7: /dotnet/aspnetcore
For Python:
MCP ref: "FastAPI exception handlers custom exceptions"
Context7: /tiangolo/fastapi
Key Patterns to Research:
- Middleware pipeline positioning
- Exception type mapping to HTTP status codes
- ProblemDetails (RFC 7807) format
- Development vs Production error details
- Logging integration
Phase 3: Decision Points
Q1: Error Response Format
| Option | Description |
|---|---|
| ProblemDetails (RFC 7807) (Recommended) | Standardized format, widely adopted |
| Custom Format | Project-specific requirements |
Q2: Error Detail Level
| Environment | Stack Trace | Inner Exceptions | Request Details |
|---|---|---|---|
| Development | ✓ Show | ✓ Show | ✓ Show |
| Production | ✗ Hide | ✗ Hide | ✗ Hide |
Q3: Error Taxonomy
Define standard error codes:
| Code | HTTP Status | Description |
|---|---|---|
VALIDATION_ERROR |
400 | Invalid input data |
UNAUTHORIZED |
401 | Authentication required |
FORBIDDEN |
403 | Insufficient permissions |
NOT_FOUND |
404 | Resource not found |
CONFLICT |
409 | Resource state conflict |
INTERNAL_ERROR |
500 | Unexpected server error |
Phase 4: Generate Configuration
.NET Output Files
| File | Purpose |
|---|---|
Middleware/GlobalExceptionMiddleware.cs |
Exception handling middleware |
Exceptions/AppException.cs |
Base exception class |
Exceptions/ValidationException.cs |
Validation errors |
Exceptions/NotFoundException.cs |
Not found errors |
Models/ErrorResponse.cs |
Error response model |
Generation Process:
- Use MCP ref to get current ASP.NET Core exception handling patterns
- Generate GlobalExceptionMiddleware with:
- Exception type to HTTP status mapping
- Logging of exceptions
- ProblemDetails response format
- Environment-aware detail level
- Generate custom exception classes
Registration Code:
app.UseMiddleware<GlobalExceptionMiddleware>();
Python Output Files
| File | Purpose |
|---|---|
exceptions/app_exceptions.py |
Custom exception classes |
exceptions/handlers.py |
FastAPI exception handlers |
models/error_response.py |
Pydantic error models |
Generation Process:
- Use MCP ref to get current FastAPI exception handling patterns
- Generate exception handlers with:
- HTTPException handling
- Custom AppException handling
- Validation error handling
- Request validation error handling
- Generate custom exception classes
Registration Code:
app.add_exception_handler(AppException, app_exception_handler)
app.add_exception_handler(RequestValidationError, validation_exception_handler)
Phase 5: Validate
Validation Steps:
Syntax check:
- .NET:
dotnet build --no-restore - Python:
python -m py_compile exceptions/handlers.py
- .NET:
Test error handling:
- Create test endpoint that throws exception
- Verify error response format
- Check that stack trace hidden in Production
Expected Error Response (ProblemDetails):
{
"type": "https://tools.ietf.org/html/rfc7231#section-6.5.1",
"title": "Validation Error",
"status": 400,
"detail": "Invalid input data",
"instance": "/api/users",
"errors": [
{ "field": "email", "message": "Invalid email format" }
],
"traceId": "abc-123-def-456"
}
Return to Coordinator
{
"status": "success",
"files_created": [
"Middleware/GlobalExceptionMiddleware.cs",
"Exceptions/AppException.cs",
"Models/ErrorResponse.cs"
],
"packages_added": [],
"registration_code": "app.UseMiddleware<GlobalExceptionMiddleware>();",
"message": "Configured global exception handling"
}
Reference Links
Version: 2.0.0 Last Updated: 2026-01-10