HTTP-verzoeken

Finch stelt het Request-object (rq) overal beschikbaar: in controllermethoden, inline route-handlers en FinchRoute-closures.

Toegang tot het verzoek

In een controller:

class MyController extends Controller {
  Future<String> index() async {
    var name = rq.get<String>('name', def: 'Guest');
    return rq.renderString(text: 'Hallo, $name');
  }
}

In een inline handler:

app.get(
  path: '/ping',
  index: (rq) async => rq.renderString(text: 'pong'),
);

In een FinchRoute-closure:

FinchRoute(
  key: 'root',
  path: '/',
  index: () async {
    var rq = Context.rq;          // Huidig verzoek ophalen
    return rq.renderString(text: 'OK');
  },
),

Invoer lezen

// Query- of formulierparameter
var value = rq.get<String>('field', def: '');
var count = rq.get<int>('count', def: 0);

// Padparameter (/items/{id})
var id = rq.getParam('id');

// Alle parameters als een Map
var all = rq.getAll();

// Ruwe JSON-body
var json = await rq.getBodyAsJson();         // Map<String, dynamic>
var list = await rq.getBodyAsJsonList();     // List<dynamic>

// Geüpload bestand
var file = rq.getFile('photo');              // FileUpload?

Verzoekeigenschappen

Eigenschap Type Beschrijving
rq.method String HTTP-methode: 'GET', 'POST', ...
rq.path String URL-pad zonder querystring
rq.ip String Remote IP-adres van de client
rq.headers Map<String, List<String>> Verzoekheaders
rq.isJson bool Of Content-Type gelijk is aan application/json
rq.currentLanguage String Huidige taalcode
rq.uri Uri Volledig URI-object
rq.cookies Map<String, String> Geparseerde inkomende cookies

Cookies

// Cookie lezen
var theme = rq.getCookie('theme', def: 'light');

// Cookie instellen
rq.addCookie('theme', 'dark', safe: false);

// Versleutelde cookie instellen
rq.addCookie('session_token', token, safe: true);

// Cookie verwijderen
rq.removeCookie('theme');

Sessie

// Lezen
var userId = rq.getSession('userId', def: '');

// Schrijven
rq.addSession('userId', user.id);

// Verwijderen
rq.removeSession('userId');

Doorsturen

// Eenvoudig doorsturen
return rq.redirect(url: '/dashboard');

// Doorsturen met statuscode
return rq.redirect(url: '/login', statusCode: 302);

Overzicht antwoordmethoden

Methode Beschrijving
rq.renderView(path: ..., params: ...) Jinja-sjabloon renderen
rq.renderData(data: ...) JSON-antwoord
rq.renderString(text: ...) Ruwe tekst/HTML
rq.renderError(status: ...) HTTP-foutantwoord
rq.renderNotFound() 404
rq.redirect(url: ...) HTTP-doorsturen