Несовместимость между полками Dart и RPC? (заголовок 'access-control-request-method')

Кажется, есть несовместимость между полкой и пакетами rpc.

В rpc [0.4.1] config/api.dart: handleHttpOptionsRequest ожидает, что заголовок "access-control-request-method" будет List:

    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", который является строкой.

Это создает исключение...

При использовании rpc с dart.io HttpServer код работает нормально, и ParsedHttpApiRequest имеет список строк (с одним элементом) в качестве значения заголовка "access-control-request-method".

Кто-нибудь успешно использует dart rpc + shelf? Если да, есть идеи, как избежать исключения?

=== [update] После исправления rpc ранее упомянутая проблема, кажется, исправлена. Спасибо за это! Сейчас я сталкиваюсь с другой проблемой, но я еще не расследовал подробно. Трассировка стека:

полка [0.5.7] полка_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>

=> увидеть несовместимость при запуске dart rpc и shelf (с shelf_rpc), связанной с заголовками, которые являются списками (а не строками)

1 ответ

Решение

Это ошибка в пакете RPC. Я исправлю это как можно скорее и опубликую новую версию пакета RPC.

Вы можете подать такую ​​проблему в github по адресу:

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

Ура, /gustav

Другие вопросы по тегам