gpt4 book ai didi

flurl - 如何使用 Flurl v3.0.0 自动记录响应

转载 作者:行者123 更新时间:2023-12-04 03:48:12 31 4
gpt4 key购买 nike

我在集成测试中使用 Flurl 并尝试配置客户端以记录响应(使用 Flurl.Http 3.0.0)。

我正在使用 event handlers以字符串形式读取响应,然后记录它。但是,如果调用代码使用 IFlurlResponse.GetJsonAsync<>启用日志记录后,反序列化对象为空(我想是因为流已被读取)。

我认为这是可能的,因为我可以看到 Flurl 在内部跟踪响应流是否已被读取(使用 _streamRead_capturedBody 成员)。

这是一个重现,使用 Flurl.Http 3.0.0 :

   class Program
{
static async Task Main(string[] args)
{
using (var client = new FlurlClient("https://jsonplaceholder.typicode.com/"))
{
var post = await client
.Request("posts/1")
.ConfigureRequest(settings => settings.AfterCallAsync = LogResponse)
.GetJsonAsync<Post>();
Console.WriteLine($"Is null with logging enabled: {post is null}"); // prints True

post = await client.Request("posts/1").GetJsonAsync<Post>();
Console.WriteLine($"Is null with logging disabled: {post is null}"); // prints False
}
}

private static async Task LogResponse(FlurlCall call)
{
var responseString = await call.Response.GetStringAsync();
Console.WriteLine(responseString);
}
}

public class Post
{
public int Id { get; set; }
public int UserId { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}

输出:

{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
}
Is null with logging enabled: True
Is null with logging disabled: False

如果我使用 GetJsonAsync<> 更改调用代码至 GetStringAsync并自己处理 json 反序列化,然后响应可以被“读取”两次,但它更冗长。

最佳答案

更新:fix一直released .


您是对的,在大多数情况下,Flurl 会“捕获”反序列化的响应,因此可以轻松地多次读取它们。但是,正如我认为您接近得出结论,这目前仅在您反序列化为同一类型时才有效。如果事件处理程序和主要逻辑都反序列化为 string,或者都反序列化为 Post,这应该可行。

我不确定我是否会称这是一个错误(也许?),但我绝对相信让它像您在这里期望的那样工作将是一个很好的改进,而且不会太难。请开一个issue我会考虑在未来的版本中完成这项工作。

关于flurl - 如何使用 Flurl v3.0.0 自动记录响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64814837/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com