A practical example of a router with multiple rules, demonstrating LIFO precedence and handling of a '404 Not Found' case.
ID: 1436
using uCalcSoftware;
var uc = new uCalc();
using (var router = new uCalc.Transformer()) {
// --- Define Routes ---
// General rules first (lower precedence)
router.FromTo("/products/{category}/{id}", "Handler: ProductDetail, category: {category}, id: {id}");
router.FromTo("/users/{id}", "Handler: UserProfile, id: {id}");
// Specific rule last (higher precedence)
router.FromTo("/users/new", "Handler: CreateUserPage");
// --- Simulate Requests ---
string[] urls = {"/users/123", "/users/new", "/products/electronics/567", "/contact"};
foreach(var url in urls) {
var originalUrl = url;
var result = router.Transform(url);
if (result.Text == originalUrl) {
Console.WriteLine($"URL: {originalUrl} -> 404 Not Found");
} else {
Console.WriteLine($"URL: {originalUrl} -> {result}");
}
}
}
URL: /users/123 -> Handler: UserProfile, id: 123
URL: /users/new -> Handler: CreateUserPage
URL: /products/electronics/567 -> Handler: ProductDetail, category: electronics, id: 567
URL: /contact -> 404 Not Found using uCalcSoftware; var uc = new uCalc(); using (var router = new uCalc.Transformer()) { // --- Define Routes --- // General rules first (lower precedence) router.FromTo("/products/{category}/{id}", "Handler: ProductDetail, category: {category}, id: {id}"); router.FromTo("/users/{id}", "Handler: UserProfile, id: {id}"); // Specific rule last (higher precedence) router.FromTo("/users/new", "Handler: CreateUserPage"); // --- Simulate Requests --- string[] urls = {"/users/123", "/users/new", "/products/electronics/567", "/contact"}; foreach(var url in urls) { var originalUrl = url; var result = router.Transform(url); if (result.Text == originalUrl) { Console.WriteLine($"URL: {originalUrl} -> 404 Not Found"); } else { Console.WriteLine($"URL: {originalUrl} -> {result}"); } } }
#include
#include "uCalc.h"
using namespace std;
using namespace uCalcSoftware;
int main() {
uCalc uc;
{
uCalc::Transformer router;
router.Owned(); // Causes router to be released when it goes out of scope
// --- Define Routes ---
// General rules first (lower precedence)
router.FromTo("/products/{category}/{id}", "Handler: ProductDetail, category: {category}, id: {id}");
router.FromTo("/users/{id}", "Handler: UserProfile, id: {id}");
// Specific rule last (higher precedence)
router.FromTo("/users/new", "Handler: CreateUserPage");
// --- Simulate Requests ---
vector urls = {"/users/123", "/users/new", "/products/electronics/567", "/contact"};
for(auto url : urls) {
auto originalUrl = url;
auto result = router.Transform(url);
if (result.Text() == originalUrl) {
cout << "URL: " << originalUrl << " -> 404 Not Found" << endl;
} else {
cout << "URL: " << originalUrl << " -> " << result << endl;
}
}
}
}
URL: /users/123 -> Handler: UserProfile, id: 123
URL: /users/new -> Handler: CreateUserPage
URL: /products/electronics/567 -> Handler: ProductDetail, category: electronics, id: 567
URL: /contact -> 404 Not Found #include <iostream> #include "uCalc.h" using namespace std; using namespace uCalcSoftware; int main() { uCalc uc; { uCalc::Transformer router; router.Owned(); // Causes router to be released when it goes out of scope // --- Define Routes --- // General rules first (lower precedence) router.FromTo("/products/{category}/{id}", "Handler: ProductDetail, category: {category}, id: {id}"); router.FromTo("/users/{id}", "Handler: UserProfile, id: {id}"); // Specific rule last (higher precedence) router.FromTo("/users/new", "Handler: CreateUserPage"); // --- Simulate Requests --- vector<string> urls = {"/users/123", "/users/new", "/products/electronics/567", "/contact"}; for(auto url : urls) { auto originalUrl = url; auto result = router.Transform(url); if (result.Text() == originalUrl) { cout << "URL: " << originalUrl << " -> 404 Not Found" << endl; } else { cout << "URL: " << originalUrl << " -> " << result << endl; } } } }
Imports System
Imports uCalcSoftware
Public Module Program
Public Sub Main()
Dim uc As New uCalc()
Using router As New uCalc.Transformer()
'// --- Define Routes ---
'// General rules first (lower precedence)
router.FromTo("/products/{category}/{id}", "Handler: ProductDetail, category: {category}, id: {id}")
router.FromTo("/users/{id}", "Handler: UserProfile, id: {id}")
'// Specific rule last (higher precedence)
router.FromTo("/users/new", "Handler: CreateUserPage")
'// --- Simulate Requests ---
Dim urls() As String = {"/users/123", "/users/new", "/products/electronics/567", "/contact"}
For Each url In urls
Dim originalUrl = url
Dim result = router.Transform(url)
If result.Text = originalUrl Then
Console.WriteLine($"URL: {originalUrl} -> 404 Not Found")
Else
Console.WriteLine($"URL: {originalUrl} -> {result}")
End If
Next
End Using
End Sub
End Module
URL: /users/123 -> Handler: UserProfile, id: 123
URL: /users/new -> Handler: CreateUserPage
URL: /products/electronics/567 -> Handler: ProductDetail, category: electronics, id: 567
URL: /contact -> 404 Not Found Imports System Imports uCalcSoftware Public Module Program Public Sub Main() Dim uc As New uCalc() Using router As New uCalc.Transformer() '// --- Define Routes --- '// General rules first (lower precedence) router.FromTo("/products/{category}/{id}", "Handler: ProductDetail, category: {category}, id: {id}") router.FromTo("/users/{id}", "Handler: UserProfile, id: {id}") '// Specific rule last (higher precedence) router.FromTo("/users/new", "Handler: CreateUserPage") '// --- Simulate Requests --- Dim urls() As String = {"/users/123", "/users/new", "/products/electronics/567", "/contact"} For Each url In urls Dim originalUrl = url Dim result = router.Transform(url) If result.Text = originalUrl Then Console.WriteLine($"URL: {originalUrl} -> 404 Not Found") Else Console.WriteLine($"URL: {originalUrl} -> {result}") End If Next End Using End Sub End Module