简体   繁体   中英

Setting REQUEST header Http Client vb.net

Consider the following VB code:

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

I want to set the request content type to application/json as well as the response content type to application/json .

If I add the following line of code: client.DefaultRequestHeaders.Add("content-type", "application/json") then the system throws an exception 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. .

I've searched all over google for a way to set the requests header to JSON. Using fiddler (on the server) I can see that the request is sent as plain/text.

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 This is where I am having an issue. This needs to be set to a content type for JSON as the body of the request is JSON. How do I set this content-type to JSON in vb.net Code.

I found a solution, I don't know if it is the correct solution or if there is a better solution out there.

Basically you need to set the content-type header on the actual content that you are sending and not on the HTTP Client.

So basically adding content.Headers.ContentType = New MediaTypeWithQualityHeaderValue("application/json") to your code should set the REQUEST's content-type to JSON as well.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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