如何在Redstone拦截器中添加CORS头?

时间:2015-02-26 18:15:30

标签: dart redstone.dart

我尝试将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}}

1 个答案:

答案 0 :(得分:1)

我在拦截器文档中的第一段代码中找到了修复程序......:)

@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()会返回包含正确标头的响应。