gpt4 book ai didi

c# - 如何更改 FLURL 客户端的 HTTP 请求内容类型?

转载 作者:太空狗 更新时间:2023-10-29 21:26:23 27 4
gpt4 key购买 nike

我正在使用 flurl 提交 HTTP 请求,这非常有用。现在我需要将某些请求的“Content-Type” header 更改为 “application/json;odata=verbose”

    public async Task<Job> AddJob()
{

var flurlClient = GetBaseUrlForGetOperations("Jobs").WithHeader("Content-Type", "application/json;odata=verbose");
return await flurlClient.PostJsonAsync(new
{
//Some parameters here which are not the problem since tested with Postman

}).ReceiveJson<Job>();
}

private IFlurlClient GetBaseUrlForOperations(string resource)
{
var url = _azureApiUrl
.AppendPathSegment("api")
.AppendPathSegment(resource)
.WithOAuthBearerToken(AzureAuthentication.AccessToken)
.WithHeader("x-ms-version", "2.11")
.WithHeader("Accept", "application/json");
return url;
}

您可以看到我是如何尝试在上面添加 header 的 (.WithHeader("Content-Type", "application/json;odata=verbose"))

不幸的是,这给了我以下错误:

"InvalidOperationException: Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects."

我还尝试了 flurl 的“ConfigureHttpClient”方法,但找不到如何/在何处设置内容类型 header 。

最佳答案

这个答案已经过时了。升级到 latest version (2.0 或更高版本),问题就消失了。

事实证明 real issueSystem.Net.Http API 如何验证 header 有关。它区分了请求级 header 和内容级 header ,我一直觉得这有点奇怪,因为原始 HTTP 没有这样的区别(可能在多部分场景中除外)。 Flurl 的 WithHeader 将 header 添加到 HttpRequestMessage 对象,但未通过 Content-Type 的验证,它希望将其添加到 HttpContent 对象。

这些 API 确实允许您跳过验证,尽管 Flurl 不直接公开它,但您可以很容易地进入引擎盖,而不会破坏流畅的链:

return await GetBaseUrlForGetOperations("Jobs")
.ConfigureHttpClient(c => c.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json;odata=verbose"))
.PostJsonAsync(new { ... })
.ReceiveJson<Job>();

这可能是做你需要做的事情的最好方法,并且仍然利用 Flurl 的优点,即不必直接处理序列化、HttpContent 对象等。

基于这个问题,我强烈考虑更改 Flurl 的 AddHeader(s) 实现以使用 TryAddWithoutValidation

关于c# - 如何更改 FLURL 客户端的 HTTP 请求内容类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44515267/

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