درخواستهای HTTP
فینچ شیء Request (rq) را در همهجا در دسترس قرار میدهد: متدهای controller، handler های inline route، و closure های FinchRoute.
دسترسی به درخواست
در یک controller:
class MyController extends Controller {
Future<String> index() async {
var name = rq.get<String>('name', def: 'Guest');
return rq.renderString(text: 'سلام، $name');
}
}
در یک handler inline:
app.get(
path: '/ping',
index: (rq) async => rq.renderString(text: 'pong'),
);
در یک closure FinchRoute:
FinchRoute(
key: 'root',
path: '/',
index: () async {
var rq = Context.rq; // دریافت درخواست جاری
return rq.renderString(text: 'OK');
},
),
خواندن ورودی
// پارامتر query یا form
var value = rq.get<String>('field', def: '');
var count = rq.get<int>('count', def: 0);
// پارامتر مسیر (/items/{id})
var id = rq.getParam('id');
// تمام پارامترها به صورت یک Map
var all = rq.getAll();
// Body خام JSON
var json = await rq.getBodyAsJson(); // Map<String, dynamic>
var list = await rq.getBodyAsJsonList(); // List<dynamic>
// فایل آپلودی
var file = rq.getFile('photo'); // FileUpload?
ویژگیهای درخواست
| ویژگی | نوع | توضیح |
|---|---|---|
rq.method |
String |
متد HTTP: 'GET'، 'POST'، ... |
rq.path |
String |
مسیر URL بدون query string |
rq.ip |
String |
آدرس IP remote کلاینت |
rq.headers |
Map<String, List<String>> |
هدرهای درخواست |
rq.isJson |
bool |
آیا Content-Type برابر application/json است |
rq.currentLanguage |
String |
کد زبان جاری |
rq.uri |
Uri |
آبجکت URI کامل |
rq.cookies |
Map<String, String> |
کوکیهای ورودی parseشده |
کوکیها
// خواندن کوکی
var theme = rq.getCookie('theme', def: 'light');
// تنظیم کوکی
rq.addCookie('theme', 'dark', safe: false);
// تنظیم کوکی رمزگذاریشده
rq.addCookie('session_token', token, safe: true);
// حذف کوکی
rq.removeCookie('theme');
Session
// خواندن
var userId = rq.getSession('userId', def: '');
// نوشتن
rq.addSession('userId', user.id);
// حذف
rq.removeSession('userId');
هدایت مجدد
// هدایت مجدد ساده
return rq.redirect(url: '/dashboard');
// هدایت مجدد با status code
return rq.redirect(url: '/login', statusCode: 302);
خلاصه متدهای پاسخ
| متد | توضیح |
|---|---|
rq.renderView(path: ..., params: ...) |
رندر قالب Jinja |
rq.renderData(data: ...) |
پاسخ JSON |
rq.renderString(text: ...) |
متن/HTML خام |
rq.renderError(status: ...) |
پاسخ خطای HTTP |
rq.renderNotFound() |
۴۰۴ |
rq.redirect(url: ...) |
هدایت مجدد HTTP |