在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
相关产品推荐
相关产品推荐

