2

我正在尝试将 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();
    }
}
4

1 回答 1

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(),返回带有正确标头的响应。

于 2015-02-27T12:23:51.793 回答