繁体   English   中英

设置REQUEST标头Http Client vb.net

[英]Setting REQUEST header Http Client vb.net

考虑下面的VB代码:

Public Async Function someFunction(ByVal url As String, Optional ByVal methodPost As Boolean = False, Optional ByVal postContent As HttpContent = Nothing) As Threading.Tasks.Task(Of String)
    Using client = New HttpClient
        client.DefaultRequestHeaders.Authorization = makeAuthenticationHeader()

        If methodPost Then
            client.DefaultRequestHeaders.Accept.Add(New MediaTypeWithQualityHeaderValue("application/json"))

            Dim Response = Await client.PostAsync(url, postContent)

            Dim content As String = Await Response.Content.ReadAsStringAsync
            Return content
        Else
            Return Await client.GetStringAsync(url)
        End If
    End Using
End Function

我想将请求内容类型设置为application/json ,并将响应内容类型设置为application/json

如果添加以下代码行: client.DefaultRequestHeaders.Add("content-type", "application/json")则系统将引发异常的Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects. Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.

我在Google各处搜索了一种将请求标头设置为JSON的方法。 使用提琴手(在服务器上),我可以看到请求以纯文本/文本形式发送。

POST **URL REMOVED FOR SAFETY REASONS** HTTP/1.1
Authorization: Basic **HASHED AUTH DETAILS - REMOVED FOR SAFETY REASONS**
Accept: application/json
Content-Type: text/plain; charset=utf-8
Host: **HOST REMOVED FOR SAFETY REASONS**
Content-Length: 1532
Expect: 100-continue
Connection: Keep-Alive

Content-Type: text/plain; charset=utf-8 Content-Type: text/plain; charset=utf-8这是我遇到的问题。 由于请求的主体是JSON,因此需要将其设置为JSON的内容类型。 如何在vb.net代码中将此content-type设置为JSON。

我找到了解决方案,我不知道这是正确的解决方案还是有更好的解决方案。

基本上,您需要在要发送的实际内容上而不是在HTTP客户端上设置content-type标头。

因此,基本上在代码中添加content.Headers.ContentType = New MediaTypeWithQualityHeaderValue("application/json") ,也应该将REQUEST的内容类型设置为JSON。

Public Async Function someDifferentFunction() As Threading.Tasks.Task(Of String)
    Dim url As String = "http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    Dim content As HttpContent = New StringContent(txtRequestBody.Text)
    content.Headers.ContentType = New MediaTypeWithQualityHeaderValue("application/json")
    Return Await someFunction(url, True, content)
End Function

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM