🐛 Corrige orden de extractores en handlers
`HttpRequest` vacía `parts.extensions` al extraerse; `Path<T>` y otros extractores que dependen de ellas deben declararse antes en el handler. Corregido en el ejemplo hello-name y documentado en HttpRequest.
This commit is contained in:
parent
8aa4372bdf
commit
aa8b109668
2 changed files with 21 additions and 1 deletions
|
|
@ -9,8 +9,8 @@ impl Extension for HelloName {
|
|||
}
|
||||
|
||||
async fn hello_name(
|
||||
request: HttpRequest,
|
||||
web::Path(name): web::Path<String>,
|
||||
request: HttpRequest,
|
||||
) -> Result<Markup, ErrorPage> {
|
||||
Page::new(request)
|
||||
.with_child(Html::with(move |_| {
|
||||
|
|
|
|||
20
src/web.rs
20
src/web.rs
|
|
@ -61,6 +61,26 @@ use std::task::{Context, Poll};
|
|||
/// // ...
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// # Orden de parámetros en el *handler*
|
||||
///
|
||||
/// `HttpRequest` toma las extensiones de la petición al extraerse. Los extractores que leen de ahí
|
||||
/// (como `Path<T>` o `Extension<T>`) deben aparecer **antes** en la lista de parámetros del
|
||||
/// *handler*:
|
||||
///
|
||||
/// ```rust,no_run
|
||||
/// # use pagetop::prelude::*;
|
||||
/// // Correcto: Path<T> se declara antes que HttpRequest.
|
||||
/// async fn view_post(
|
||||
/// web::Path(id): web::Path<u32>,
|
||||
/// request: HttpRequest,
|
||||
/// ) -> Result<Markup, ErrorPage> {
|
||||
/// # todo!()
|
||||
/// }
|
||||
/// ```
|
||||
///
|
||||
/// Los extractores que no dependen de las extensiones, como `Query<T>` o `Method`, no están sujetos
|
||||
/// a esta restricción.
|
||||
#[derive(Clone, Debug)]
|
||||
pub struct HttpRequest {
|
||||
uri: http::Uri,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue