如何在Iron的AfterMiddleware中添加标题?

时间:2016-03-29 16:45:11

标签: rust iron

我想为我的应用所做的每个回复添加Access-Control-Allow-Origin: *

根据the docsAfterMiddleware正是为了这个

  

在常见情况下,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变量类型引起,但由于这是特征函数签名,我无法改变它。那么,我该如何改变一些不可改变的东西呢?如果可能的话,复制整个响应只是为了添加一个标题会很奇怪。

1 个答案:

答案 0 :(得分:3)

最简单的解决方案

  

使用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中,当您是数据所有者时,您可以对它们执行任何操作,因此这可以解决您的问题。