Vb.net HttpClient返回带有正确授权标题的401
我已经尝试使用vb.net使用eventbrite api有一段时间了,我正在使用Vb.net HttpClient返回带有正确授权标题的401,vb.net,httpclient,asp.net-web-api,eventbrite,postman,Vb.net,Httpclient,Asp.net Web Api,Eventbrite,Postman,我已经尝试使用vb.net使用eventbrite api有一段时间了,我正在使用HttpClient来使用api,但是它只返回HTTP 401 unhorised当我使用postman调用具有相同头的相同方法时,它会返回带有HTTP 200 OK VB.Net 要求 邮递员 我之所以得到未经授权的401,是因为当我最初调用api时,我正在查询https://www.eventbriteapi.com/v3/events/search?organizer.id=77181XXXXX 此URL无效
HttpClient
来使用api,但是它只返回HTTP 401 unhorised
当我使用postman调用具有相同头的相同方法时,它会返回带有HTTP 200 OK
VB.Net
要求
邮递员
我之所以得到未经授权的
401
,是因为当我最初调用api时,我正在查询https://www.eventbriteapi.com/v3/events/search?organizer.id=77181XXXXX
此URL无效,应为https://www.eventbriteapi.com/v3/events/search/?organizer.id=77181XXXXX
(注意额外的/搜索后的内容)
Eventbrite自动将我重定向到正确的URL,但它丢失了身份验证标头,因此未经授权
工作VB.Net代码:
我也有类似的问题。
构建.net应用程序时,我正在使用HttpClient类。我调用的url是“http”,服务器将其重定向到https。显然,这会删除标题。不是通过邮递员发生的
解决方案:使用httpS试试fiddler,看看到底传递了什么。不幸的是,api只在https上工作,所以它都是加密的,没有什么帮助:(啊,是的,我没想到……你在发送请求之前试过指定内容类型吗(我曾经遇到过这种情况)?client.DefaultRequestHeaders.Accept.Clear()uClient.DefaultRequestHeaders.Accept.Add(新MediaTypeWithQualityHeaderValue(“应用程序/json”))不幸的是,这没有任何效果,还有其他想法吗?在我的例子中,我测试了“swagger”,它将我重定向到了“swagger/index.html”
Dim objClient As New HttpClient()
objClient.BaseAddress = New Uri("https://www.eventbriteapi.com/v3/")
objClient.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", "IODVRTRFJ5FVEXZXXXXX")
Dim objResponse As HttpResponseMessage = Await objClient.GetAsync("events/search?organizer.id=77181XXXXX")
If objResponse.IsSuccessStatusCode Then
Dim strJSON As String = Await objResponse.Content.ReadAsStringAsync
txtOutput.Text = strJSON
Else
txtOutput.AppendText(objResponse.ToString + vbCrLf)
txtOutput.AppendText(objResponse.RequestMessage.ToString + vbCrLf)
End If
objClient.Dispose()
Method: GET, RequestUri: 'https://www.eventbriteapi.com/events/search?organizer.id=77181XXXXX', Version: 1.1, Content: <null>, Headers:
{
Authorization: Bearer IODVRTRFJ5FVEXZXXXXX
}
StatusCode: 401, ReasonPhrase: 'UNAUTHORIZED', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Transfer-Encoding: chunked
Connection: keep-alive
x-xss-protection: 1; mode=block
x-content-type-options: nosniff
Vary: Accept
X-UA-Compatible: IE=edge
X-Frame-Options: SAMEORIGIN
Access-Control-Allow-Origin: *
Access-Control-Allow-Headers: Authorization
Date: Fri, 28 Nov 2014 14:32:02 GMT
P3P: CP="NOI ADM DEV PSAi COM NAV OUR OTRo STP IND DEM"
Set-Cookie: SS=AE3DLHTSIyq8Ey6stmsFe7sH0LwxwTjQNw; Domain=.eventbriteapi.com; httponly; Path=/; secure
Set-Cookie: eblang=lo%3Den_US%26la%3Den-us; Domain=.eventbriteapi.com; expires=Sat, 28-Nov-2015 14:32:02 GMT; httponly; Path=/
Set-Cookie: SP=AGQgbblV535q50zSGYa6PvdeMsiuIPDnFlsnyVrk5VIvAnFRtrUHh7AU791a46nkYXJQhH3_VZLFgHuw4j8sAYXPy3l6adKHpQ5js-vjoXyJpTp51nd4Ewnhd-lS9UlI2YL0rUaHCkLvt4_buXJOvRuN222hINBjvQBsJPrR9woApj_ic0MT0cJcNIDsY40PnEOhH8p2xijrXVZHQa6fjwemsjgJEu_Vn6NBi4UO9hBL7sLl-eetYyE; Domain=.eventbriteapi.com; httponly; Path=/
Set-Cookie: G=v%3D1%26i%3D1429e3af-ac09-4b67-b2a3-1f4473c28bcd%26a%3D51b%26s%3DAPDvTK5mqMI40Xz80zXcPKvFx7daGz_DOA; Domain=.eventbriteapi.com; expires=Sat, 28-Nov-2015 14:32:02 GMT; httponly; Path=/
Set-Cookie: AN=; expires=Thu, 01-Jan-1970 00:00:00 GMT; Max-Age=0; Path=/
Server: nginx
Allow: GET
Allow: HEAD
Allow: OPTIONS
Content-Type: application/json
}
Dim objClient As New HttpClient()
Try
objClient.BaseAddress = New Uri("https://www.eventbriteapi.com/v3/")
objClient.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", Context.EventBriteApiToken)
Dim objResponse As HttpResponseMessage = Await objClient.GetAsync("users/" + Context.EventBriteUserId + "/owned_events/?page=" + intPage.ToString)
objResponse.EnsureSuccessStatusCode() '** Throws exception
Dim strJSON As String = Await objResponse.Content.ReadAsStringAsync
Return JsonConvert.DeserializeObject(Of EventBrite.EventSearchResponse)(strJSON)
Catch ex As Exception
Throw ex
Finally
objClient.Dispose()
End Try