rust - 如何在 Iron 的 AfterMiddleware 中添加 header ?

标签 rust iron

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

根据the docs , AfterMiddleware 正是为此而生

In the common case, a complete response is generated by the Chain's Handler and AfterMiddleware simply do post-processing of that Response, such as adding headers or logging.

所以我尝试这样使用:

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)
    }
}

但是我收到错误无法借用不可变字段“res.headers”作为可变字段。我不确定这是否是由不可变的 Response 变量类型引起的,但由于这是特征函数签名,我无法更改它。那么,我该如何改变一些不可变的东西呢?如果可能的话,复制整个响应只是为了添加一个 header 会很奇怪。

最佳答案

最简单的解决方案

use mut variable

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 中,当你是数据的所有者时,你可以用它们做任何事情,所以这应该可以解决你的问题。

关于rust - 如何在 Iron 的 AfterMiddleware 中添加 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290284/

相关文章:

rust - 如何修改使用 serde 序列化的 Result<T,E> 的 JSON 输出?

rust - Rust 中是否有创建 HashSet 的宏

parsing - 当输入为 &str 时,如何获取多个顺序 nom 解析器的输出?

rust - 无法设置 Iron 框架响应的 header

rust - 我怎样才能让 Serde 在反序列化期间从 arena 分配字符串?

rust - include_bytes 的运行时成本是多少!或包含_str?

rust - 如何使用 Iron 创建自定义内容类型?

rust - 铁处理机 : Missing Lifetime Specifiers

svg - 自定义图标未显示在铁图标中