当前位置: 首页 > 知识库问答 >
问题:

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

商迪
2023-03-14

我正在使用flurl提交HTTP请求,这是非常有用的。现在,我需要将一些请求的“content-type”头更改为“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;
    }

您可以看到我如何尝试添加上面的头(.witheader(“content-type”,“application/json;odata=verbose”))

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

“InvalidOperationException:错误使用的标头名称。请确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用。”

我还尝试了Flurl的“ConfigureHttpClient”方法,但找不到如何/在哪里设置内容类型头。

共有1个答案

葛智敏
2023-03-14

这个答案已经过时了。升级到最新版本(2.0或以上),问题就消失了。

事实证明,真正的问题与system.net.httpAPI如何验证标头有关。它区分了请求级头和内容级头,我总是觉得有点奇怪,因为原始HTTP没有这样的区分(可能在多部分场景中除外)。Flurl的Witheader将标头添加到HttpRequestMessage对象中,但对Content-Type的验证失败,它希望将其添加到HttpContent对象中。

这些API确实允许您跳过验证,尽管Flurl没有直接公开它,但您可以非常容易地进入引擎盖下,而不会破坏fluent链:

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

这可能是完成所需任务的最佳方式,同时还可以利用Flurl的优点,即不必直接处理序列化、httpContent对象等。

 类似资料:
  • 我有一本书。NETCore2.0WebAPI应用程序,其中我将“Flurl.Http”(版本2.1.0)NuGet包添加到我的项目中。 我正在尝试使用Flurl对一个VisualStudioTeamServices(VSTS)APIendpoint进行简单的RESTAPI调用。 但是,我正在调用的特定VSTS api终结点要求将Content-Type设置为“应用程序/json-补丁json”,而

  • 当浏览器请求网页时,它会向 Web 服务器发送特定信息,这些信息不能被直接读取,因为这些信息是作为 HTTP 请求的头的一部分进行传输的。您可以查看 HTTP 协议 了解更多相关信息。 以下是来自于浏览器端的重要头信息,您可以在 Web 编程中频繁使用: 头信息 描述 Accept 这个头信息指定浏览器或其他客户端可以处理的 MIME 类型。值 image/png 或 image/jpeg 是最常

  • 我在docker容器中运行gunicorn flask服务,并使用Google容器引擎。我在下面的教程中设置了集群http://kubernetes.io/docs/hellonode/ 环境变量在Kubernetes集群中始终包含一个内部地址。我要找的是HTTP_X_FORWARDED_for,但请求头中缺少它。是否可以将服务配置为在请求中保留外部客户端ip?

  • 问题内容: 我有一个node.js Connect服务器,用于检查请求的Cookie。为了在节点中测试它,我需要一种写客户端请求并将cookie附加到它的方法。我知道HTTP请求对此具有’cookie’标头,但是我不确定如何设置和发送它- 我还需要在同一请求中发送POST数据,因此我目前正在使用danwrong的restler模块,但似乎没有让我添加该标头。 关于如何使用硬编码的cookie和PO

  • 我想发送一个请求,使用Flurl指定内容头。我已经成功地设置了内容类型(),没有任何问题: 正确返回: 所使用的API是一个模拟。我知道使用会自动设置头,但是,对于我的用例,它将被设置为,因此需要显式指定。 我做错了什么?关于内容头,我有什么不明白的吗? 与在添加到请求时有什么不同?

  • 我对监视应用程序使用的HTTP REST API很感兴趣。 使用spring boot、dropwizard和EnablePrometheUseEndpoint。我能够在prometheusendpoint上生成这样的prometheus指标: 我想在grafana中构建一个图形来显示对uri上GET方法的所有调用api_v1_objects不同的状态代码(每个状态代码一行)。 我应该将状态代码设