Dart shelf 和 rpc 包之间不兼容? ('access-control-request-method' header)

Incompatibility between the Dart shelf and rpc packages? ('access-control-request-method' header)

shelf 和 rpc 包之间似乎不兼容。

在 rpc [0.4.1] config/api.dart 中:handleHttpOptionsRequest 期望 'access-control-request-method' header 成为列表:

    Future<HttpApiResponse> handleHttpOptionsRequest(
          ParsedHttpApiRequest request) async {
        var requestedHttpMethods = request.headers['access-control-request-method'];
        List<String> allowed = [];
        assert('OPTIONS'.allMatches(request.methodKey).length == 1);
        if (requestedHttpMethods != null) {
          requestedHttpMethods.forEach((httpMethod) {
            var methodKey =
                request.methodKey.replaceFirst('OPTIONS', httpMethod);
            final List<ApiConfigMethod> methods = _methodMap[methodKey];
            if (methods != null) {
              for (var method in methods) {
                if (method.matches(request)) {
                  allowed.add(httpMethod);
                  break;
               }
              }
            }
          });
        }

使用shelf [0.5.7]包时, 传递给此方法的 ParsedHttpApiRequest 包含一个 'access-control-request-method' header 这是一个字符串。

这会产生异常...

将 rpc 与 dart.io HttpServer 一起使用时,代码工作正常并且 ParsedHttpApiRequest 有一个字符串列表(只有一个元素)作为 'access-control-request-method' header.

有人成功使用过 dart rpc + shelf 吗?如果是这样,关于如何避免的任何想法 异常?

=== [更新] rpc 修复后,前面提到的问题似乎已修复。感谢那! 我现在 运行 进入另一个问题,但我还没有详细调查。 堆栈跟踪是:

架子 [0.5.7] shelf_rpc [0.0.3] rpc [0.4.2]:

     Error thrown by handler.
     type 'List' is not a subtype of type 'String' of 'value'.
     package:collection/src/canonicalized_map.dart 66:30  CanonicalizedMap.[]=
     package:collection/src/canonicalized_map.dart 71:39  CanonicalizedMap.addAll.<fn>
     dart:collection                                      _CompactLinkedHashMap.forEach
     package:collection/src/canonicalized_map.dart 71:18  CanonicalizedMap.addAll
     package:collection/src/canonicalized_map.dart 57:11  CanonicalizedMap.CanonicalizedMap.from
     package:shelf/src/response.dart 215:9                Response.Response
     package:shelf_rpc/shelf_rpc.dart 18:24               createRpcHandler.<fn>.<fn>

=> 参见

这是 RPC 包中的错误。我会尽快修复这个问题并发布新版本的 RPC 包。

欢迎您在 github 下将此类问题提交至:

https://github.com/dart-lang/rpc/issues

干杯, /古斯塔夫