Custom Options
Configure StatusCodePages behavior via options such as content type, formats, redirects, or re-execution.
Full source
File: pwsh/tutorial/examples/17.2-StatusCodePages-Options.ps1
#
# Sample: Status Code Pages with Options
# Demonstrates configuring StatusCodePages using options-like switches (template/redirect/re-exec)
# FileName: 17.2-StatusCodePages-Options.ps1
#
param(
[int]$Port = 5000,
[IPAddress]$IPAddress = [IPAddress]::Loopback
)
Initialize-KrRoot -Path $PSScriptRoot
New-KrLogger |
Add-KrSinkConsole |
Register-KrLogger -Name 'console' -SetAsDefault | Out-Null
# Create server and listener
New-KrServer -Name 'Status Code Pages with Options'
Add-KrEndpoint -Port $Port -IPAddress $IPAddress
# Choose ONE of the following blocks (uncomment the one you want)
# 1) Default (plain text)
Enable-KrStatusCodePage
# 2) Template body format (HTML with placeholder)
# $html = Get-Content -Path (Join-Path $PSScriptRoot 'Assets\wwwroot\statuscodepages\error-options.html') -Raw
# Enable-KrStatusCodePage -ContentType 'text/html; charset=utf-8' -BodyFormat $html
# 3) Redirects to /error/{status}
# Enable-KrStatusCodePage -LocationFormat '/error/{0}'
# 4) Re-execute pipeline at /errors/{status}
# Enable-KrStatusCodePage -PathFormat '/errors/{0}' -QueryFormat 'originalPath={0}'
# Commit configuration
Enable-KrConfiguration
# Demo route
Add-KrMapRoute -Verbs Get -Pattern '/hello' -ScriptBlock {
Write-KrTextResponse -InputObject 'hello' -StatusCode 200
}
# Trigger routes
Add-KrMapRoute -Verbs Get -Pattern '/notfound' -ScriptBlock { Write-KrStatusResponse -StatusCode 404 }
Add-KrMapRoute -Verbs Get -Pattern '/error' -ScriptBlock { Write-KrStatusResponse -StatusCode 500 }
Add-KrMapRoute -Verbs Get -Pattern '/forbidden' -ScriptBlock { Write-KrStatusResponse -StatusCode 403 }
Add-KrMapRoute -Verbs Get -Pattern '/unauthorized' -ScriptBlock { Write-KrStatusResponse -StatusCode 401 }
Start-KrServer -CloseLogsOnExit
Step-by-step
- Logging: Register a console logger as default.
- Server: Create the server host.
- Listener: Bind to 127.0.0.1:5000.
- Options: Enable StatusCodePages with desired options (e.g., content type/body format).
- Routes: Map demo routes that set typical status codes (404/500/403/401).
- Start: Apply configuration and start the server.
Try it
curl -i http://127.0.0.1:5000/hello
curl -i http://127.0.0.1:5000/missing
curl -i http://127.0.0.1:5000/error
curl -i http://127.0.0.1:5000/forbidden
curl -i http://127.0.0.1:5000/unauthorized
PowerShell equivalents:
Invoke-WebRequest -Uri http://127.0.0.1:5000/hello | Select-Object StatusCode, Content
Invoke-WebRequest -Uri http://127.0.0.1:5000/missing -SkipHttpErrorCheck | Select-Object StatusCode | Format-List
Invoke-WebRequest -Uri http://127.0.0.1:5000/error -SkipHttpErrorCheck | Select-Object StatusCode | Format-List
Invoke-WebRequest -Uri http://127.0.0.1:5000/forbidden -SkipHttpErrorCheck | Select-Object StatusCode | Format-List
Invoke-WebRequest -Uri http://127.0.0.1:5000/unauthorized -SkipHttpErrorCheck | Select-Object StatusCode | Format-List
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
| Wrong content type | -ContentType omitted or overridden | Pass -ContentType explicitly on Enable-KrStatusCodePage |
| Placeholders not replaced | -BodyFormat string issue | Use {0} for status code and ensure braces aren’t escaped |
| Options ignored | Middleware order incorrect | Call Enable-KrStatusCodePage before mapping routes |
References
Previous / Next
Previous: Default Status Code Pages Next: Custom Handler (PowerShell)