FluentHtml.Http
HTTP layer integration for FluentHtml.
Installation
dotnet add package FluentHtml.Http
Key Features
HtmlResult
An IResult implementation that renders FluentHtml nodes to HTML responses.
app.MapGet("/", () => new HtmlResult(H1("Hello")));
ToHtmlResult Extension
Convert any node to an IResult:
app.MapGet("/page", () => MyPage().ToHtmlResult());
FluentRouter
A wrapper around IEndpointRouteBuilder providing clean MapGet/MapPost/MapPut/MapPatch/MapDelete methods with auto-form-binding and automatic Node-to-HtmlResult conversion.
var routes = app.FluentRouting();
routes.MapGet("/", HomePage.Render);
routes.MapPost("/create", CrudPage.CreateCustomer);
routes.MapPatch("/toggle/{id}", TodoPage.ToggleTodo);
routes.MapDelete("/delete/{id}", TodoPage.DeleteTodo);
Auto-form-binding (POST/PUT/PATCH): Handler parameters are bound from form data or route values. Supports HttpContext, CancellationToken, IFormCollection injection, simple types, and complex type binding.
Auto-route-binding (GET/DELETE): Handler parameters are bound from route values or query string.
Auto-Node wrapping: Handlers returning Node are automatically wrapped in HtmlResult. IResult values pass through as-is.
Setup
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAntiforgery();
var app = builder.Build();
app.UseAntiforgery();
var routes = app.FluentRouting();
routes.MapGet("/", HomePage.Render);
routes.MapPost("/create", MyPage.Create);
routes.MapDelete("/delete/{id}", MyPage.Delete);
app.Run();