2

我想为Access-Control-Allow-Origin: *我的应用程序将做出的每一个响应添加。

根据文档AfterMiddleware正是为此

在常见情况下,Chain 的 Handler 会生成完整的响应,AfterMiddleware 只需对该响应进行后处理,例如添加标头或日志记录。

所以我试着像这样使用它:

struct CorsMiddleware;

impl AfterMiddleware for CorsMiddleware {
    fn after(&self, req: &mut Request, res: Response) -> IronResult<Response> {
        res.headers.set(hyper::header::AccessControlAllowOrigin::Any);
        Ok(res)
    }
}

但我得到了错误cannot borrow immutable field "res.headers" as mutable。我不确定这是否是由不可变Response变量类型引起的,但由于这是特征函数签名,我无法更改它。那么,我应该如何改变不可变的东西呢?如果可能的话,复制整个响应只是为了添加一个标题会很奇怪。

4

1 回答 1

4

最简单的解决方案

使用mut变量

struct CorsMiddleware;

impl AfterMiddleware for CorsMiddleware {
    fn after(&self, req: &mut Request, mut res: Response) -> IronResult<Response> {
        res.headers.set(hyper::header::AccessControlAllowOrigin::Any);
        Ok(res)
    }
}

在 Rust 中,当您是数据的所有者时,您可以对它们做任何事情,所以这应该可以解决您的问题。

于 2016-03-29T17:28:13.630 回答