Middleware
Глобальный и маршрутный middleware для C# — без значений по умолчанию от фреймворка
Обзор
delegate object? FusionMiddleware(FusionRequest request, Func<FusionRequest, object?> callNext);Нет middleware по умолчанию. Используйте app.Use(...) и/или [Route(..., Roles = ...)].
Глобальный уровень
var MIDDLEWARE = new List<FusionMiddleware>
{
// Middleware.BearerJwt(),
};
using var app = new FusionApp(SettingsStore.GetSettings());
foreach (var mw in MIDDLEWARE) app.Use(mw);
app.Listen();Пользовательский middleware
FusionMiddleware RequireApiKey = (request, callNext) =>
{
if (!request.Headers.TryGetValue("x-api-key", out var key) || key != "secret")
return new Dictionary<string, object?>
{
["status"] = 401,
["body"] = new { detail = "invalid api key" },
};
return callNext(request);
};Пишите в request.State; handlers читают State.
Helpers для Roles / JWT
MIDDLEWARE.Add(Middleware.BearerJwt()); // optional verify: callback
[Route("/api/admin", Roles = new[] { "admin" })]
public class AdminModule : FusionBaseApi
{
public object Get() => Response(new { ok = true });
}Middleware.RequireRoles("admin", "super_admin");
Middleware.RequireRoles(new[] { "admin" }, claim: "roles", stateKey: "jwt");Decode bearer по умолчанию — непроверенный base64url; для production передайте verify.