Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 对RequestGuard中的错误使用自定义火箭响应程序_Rust_Rust Rocket - Fatal编程技术网

Rust 对RequestGuard中的错误使用自定义火箭响应程序

Rust 对RequestGuard中的错误使用自定义火箭响应程序,rust,rust-rocket,Rust,Rust Rocket,在使用rocket.rs的web服务器应用程序中,我使用的错误类型在整个API中实现了响应程序。此错误类型确保所有错误都统一呈现(作为RFC 7807 json) 但是,我找不到在RequestGuards中使用这些错误响应的方法。似乎from_request函数会产生一个结果,它使用一个完全不同的模型,返回output::Failure((Status,T)) 如何确保这些请求保护中的错误以相同的JSON格式呈现?它甚至可以定制吗 我尝试使用catcher,但这似乎无法检索任何错误信息。状态:

在使用rocket.rs的web服务器应用程序中,我使用的错误类型在整个API中实现了
响应程序
。此错误类型确保所有错误都统一呈现(作为RFC 7807 json)

但是,我找不到在
RequestGuards
中使用这些错误响应的方法。似乎
from_request
函数会产生一个
结果
,它使用一个完全不同的模型,返回
output::Failure((Status,T))

如何确保这些请求保护中的错误以相同的JSON格式呈现?它甚至可以定制吗

我尝试使用catcher,但这似乎无法检索任何错误信息。

状态:

请注意,用户可以请求类型的
结果
选项
,以捕获
故障
并检索错误值

  • FromRequest
    实现的开始,定义
    type Error=JsonValue

  • from_request
    函数中,确保它返回
    request::output
    ,其中
    S
    是您实现的目的

  • from_request
    函数中,当您想要返回失败时,执行类似
    output::failure((Status::Unauthorized,json!({“error”:“Unauthorized”}))的操作
    ,或者执行您想要返回的任何操作

  • 在路由功能中,使用
    Result
    作为请求保护的类型,其中
    s
    是您实现的目的。例如,在路线中,使用
    match
    将其与
    Ok
    Err(json\u error)
    匹配

  • 可能有一种方法可以传递
    output::Failure
    的状态,但我所描述的解决方案意味着,如果您使用的是自定义响应程序,您将在响应程序中设置状态,而不是基于
    output::Failure
    ——例如下面的代码

    下面是一个应用于文档中的
    ApiKey
    请求保护示例的示例,其中一个名为
    ApiResponse
    的示例自定义响应程序设置了自己的状态:

    #[宏使用]
    外部板条箱火箭;
    #[宏_使用]
    外部板条箱火箭;
    #[宏_使用]
    外部板条箱serde_;
    使用结果;
    使用rocket::http:{ContentType,Status};
    使用rocket::request::{self,request,FromRequest};
    使用rocket::response::{self,Responder,response};
    使用rocket_contrib::json::{json,JsonValue};
    #[导出(调试)]
    发布结构ApiResponse{
    pub-json:JsonValue,
    发布状态:状态,
    }
    API响应的impl{
    fn respond_to(self,req:&Request)->response::Result状态:

    请注意,用户可以请求类型的
    结果
    选项
    ,以捕获
    故障
    并检索错误值

  • 在您的
    FromRequest
    实现开始时,定义
    type Error=JsonValue;

  • from_request
    函数中,确保它返回
    request::output
    ,其中
    S
    是您实现的目的

  • from_request
    函数中,当您想要返回失败时,执行类似
    output::failure((Status::Unauthorized,json!({“error”:“Unauthorized”}))的操作
    ,或者执行您想要返回的任何操作

  • 在路由的函数中,使用
    Result
    作为请求保护的类型,其中
    s
    是您在何处实现的。在路由中,使用
    match
    将其与
    Ok(s)
    Err(json\u error)
    匹配

  • 可能有一种方法可以传递
    output::Failure
    的状态,但我所描述的解决方案意味着,如果您使用的是自定义响应程序,您将在响应程序中设置状态,而不是基于
    output::Failure
    ——例如下面的代码

    下面是一个应用于文档中的
    ApiKey
    请求保护示例的示例,其中一个名为
    ApiResponse
    的示例自定义响应程序设置了自己的状态:

    #[宏使用]
    外部板条箱火箭;
    #[宏_使用]
    外部板条箱火箭;
    #[宏_使用]
    外部板条箱serde_;
    使用结果;
    使用rocket::http:{ContentType,Status};
    使用rocket::request::{self,request,FromRequest};
    使用rocket::response::{self,Responder,response};
    使用rocket_contrib::json::{json,JsonValue};
    #[导出(调试)]
    发布结构ApiResponse{
    pub-json:JsonValue,
    发布状态:状态,
    }
    API响应的impl{
    fn response_to(self,req:&Request)->response::Result