我正在使用actix-web 3。我想从Actix-web的中间件系统中访问当前状态代码。
我想根据状态代码修改请求,可以吗?
例如,如果用户发送一些数据,导致actix-web生成413代码,我希望修改请求。我可以通过使用actix_web::middleware::errhandlers::ErrorHandlers的处理程序来修改响应,但是这些处理程序只有mut res: actix_web::dev::ServiceResponse作为它们的参数,而且我似乎无法找到从这些处理程序中访问actix_web::dev::ServiceRequest对象的方法。
我想使用基本的中间件,因为中间件中提供了actix_web::dev::ServiceRequest和actix_web::dev::ServiceResponse对象。
发布于 2021-08-13 09:23:44
我似乎忘记了中间件是如何工作的。
状态代码可以通过使用中间件代码中的HttpResponse对象的status()方法来获得。实现 actix_web::dev::Service特征的代码可以访问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)
}
)https://stackoverflow.com/questions/68760900
复制相似问题