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 |