Как добавить заголовки CORS в перехватчик Redstone?

Я пытаюсь добавить заголовки CORS к входящим запросам, но я заметил, что app.response.headers это неизменная карта и app.request.response не существует даже при том, что это появляется в примерах документации. Итак, к OPTIONS запрос я отвечаю с использованием нового Shelf ответ, но я не могу найти способ добавить какие-либо новые заголовки в ответ на фактический запрос. Есть идеи?

@app.Interceptor(r"/api/.*", chainIdx: 1)
corsInterceptor() {

    if (app.request.method == "OPTIONS") {
        var response = new shelf.Response.ok("", headers: HEADERS);
        app.chain.interrupt(statusCode: HttpStatus.OK, responseValue: response);
    } else {
    // app.request.response is not available
        app.request.response.headers.add('Access-Control-Allow-Origin', '*');
        app.chain.next();
    }
}

1 ответ

Решение

Я нашел исправление в первом фрагменте кода в документации Interceptor...:)

@app.Interceptor(r"/api/.*", chainIdx: 1)
corsInterceptor() {
    if (app.request.method == "OPTIONS") {
        var response = new shelf.Response.ok("", headers: HEADERS);
        app.chain.interrupt(statusCode: HttpStatus.OK, responseValue: response);
    } else {
        app.chain.next(() => app.response.change(headers: HEADERS));
    }
}

app.chain.next() может принять обратный вызов в качестве аргумента, который должен вернуть Response объект. В этом случае app.response.change() возвращает ответ с правильными заголовками.

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