You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Dart的shelf框架中如何实现请求路径重定向

问题原因

你调用的HttpClientResponse.redirect是Dart内置HTTP客户端的API,用于你作为请求方处理第三方服务返回的重定向响应,不属于shelf服务端返回重定向响应的API,所以无法在shelf的路由handler中使用。

解决方案

直接使用shelf库Response类自带的redirect构造方法返回重定向响应即可,无需额外依赖。你只需要修改rootHandler的实现:

Response rootHandler(Request req) {
  // 默认返回302临时重定向,如需永久重定向可添加status参数:status: HttpStatus.movedPermanently
  return Response.redirect(Uri.parse('/oauth2callback'));
}

修改后完整可运行代码如下:

import 'dart:io';

import 'package:shelf/shelf.dart';
import 'package:shelf/shelf_io.dart';
import 'package:shelf_router/shelf_router.dart';

final router = Router()
  ..get('/', rootHandler)
  ..get('/oauth2callback', oauth2callback);

Response rootHandler(Request req) {
  return Response.redirect(Uri.parse('/oauth2callback'));
}

Response oauth2callback(Request request) {
  return Response.ok('Redirected!\n');
}

void main(List<String> args) async {
  final _handler = Pipeline().addMiddleware(logRequests()).addHandler(router);
  final server = await serve(_handler, '0.0.0.0', 8080);
  print('Server listening on port ${server.port}');
}

内容的提问来源于stack exchange,提问作者abyesilyurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 16:18:04