درخواست‌های 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