rust 如何在actix-web中间件中获取响应状态?

6yjfywim  于 2023-10-20  发布在  其他
关注(0)|答案(1)|浏览(147)

我用的是ACTIX-WEB 3。我想从Actix-web的中间件系统中访问当前状态代码。
我想修改基于StatusCode的请求,这可能吗?
例如,如果用户发送一些数据,导致actix-web生成413代码,我想修改请求。我可以通过使用ErrorHandlers的处理程序来修改Response,但是这些处理程序只有mut res: ServiceResponse<B>作为它们的参数,并且似乎我无法找到从这些处理程序中访问ServiceRequest对象的方法。
我想使用基本的中间件作为ServiceRequestServiceResponse对象在中间件中可用。

k7fdbhmy

k7fdbhmy1#

状态代码可以通过使用中间件代码中HttpResponse对象的.status()方法获得。实现Service trait的代码可以访问HttpResponse,如下所示。
由于状态是在发送请求后生成的,因此无法事先知道状态以便修改请求。

let fut = self.service.call(req);

Box::pin(async move {
    let res = fut.await?;
    println!("Hi from response, res.status is:'{}'", res.status());
    Ok(res)
})

相关问题