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

  1. Logging: Register a console logger as default.
  2. Server: Create the server host.
  3. Listener: Bind to 127.0.0.1:5000.
  4. Options: Enable StatusCodePages with desired options (e.g., content type/body format).
  5. Routes: Map demo routes that set typical status codes (404/500/403/401).
  6. 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)