如何在 Iron 的 AfterMiddleware 中添加一个 header?
How to add a header in Iron's AfterMiddleware?
我想为我的应用做出的每个响应添加 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)
}
}
但是我收到错误 cannot borrow immutable field "res.headers" as mutable
。我不确定这是否是由不可变 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 中,当你是数据的所有者时,你可以对它们做任何事情,所以这应该可以解决你的问题。
我想为我的应用做出的每个响应添加 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)
}
}
但是我收到错误 cannot borrow immutable field "res.headers" as mutable
。我不确定这是否是由不可变 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 中,当你是数据的所有者时,你可以对它们做任何事情,所以这应该可以解决你的问题。