Flurl API 未发送 POST 请求

Flurl API not sending POST request

我需要 post webhook 信息到我的数据库中。这很简单,我可以做到,但我在更新已插入数据库的行项目时遇到问题。我想我可以更改 post 我必须放置的位置,但这不会添加新条目。我试图用这段代码做一个解决方案。

var responseString7 = await url
            .GetAsync()
            .ConfigureAwait(true);

        if (responseString7.IsSuccessStatusCode)
        {
            var responseString = await url
            .WithHeader("Accept", "application/json")
            .PutJsonAsync(new
            {
                trackingNumber = stuff.result.tracking_code,
                EPTrackingStatus = stuff.result.status,
                EPStatusDetails = stuff.result.status_detail,
                EPUpdatedAt = stuff.result.updated_at
            })
            .ReceiveString();
        }
        else
        {
            var responseString3 = await "url you cant see"
                .WithHeader("Accept", "application/json")
                .PostJsonAsync(new
                {
                    trackingNumber = stuff.result.tracking_code,
                    EPTrackingStatus = stuff.result.status,
                    EPStatusDetails = stuff.result.status_detail,
                    EPUpdatedAt = stuff.result.updated_at
                })
                .ReceiveString();

此解决方案将 PUT 而不是 POST。有更简单的方法吗?

Flurl behaves differently (by default) than HttpClient 关于错误。如果它遇到非 2xx 响应,则会抛出。所以它没有到达你的 else 块,因为首先抛出异常。修复代码的最简单方法是禁用该行为:

url.AllowAnyHttpStatus().GetAsync();

在下一次调用中,如果两种情况(URL、header、数据)中除了动词之外的所有内容都相同,您可以考虑使用 Flurl 的 [=13] 稍微简化一下=],您可以在其中将 HTTP 动词指定为变量。

var method = getResponse.IsSuccessStatusCode ? HttpMethod.Put : HttpMethod.Post;

var responseString3 = await url
    .WithHeader(...)
    .SendJsonAsync(method, new { ... })
    .ReceiveString();