我想为我的应用程序将做出的每个响应添加 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/