【问题标题】:HttpClient returns 401 with correct authorisation headerHttpClient 返回 401 并带有正确的授权标头
【发布时间】:2015-01-27 05:55:51
【问题描述】:

我一直在尝试使用 vb.net 使用 eventbrite api,我使用 HttpClient 来使用 api,但是当我使用相同的标头调用相同的方法时它只返回 HTTP 401 Unathorised使用邮递员,它会返回带有HTTP 200 OK的预期响应

VB.Net

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
}

邮递员

【问题讨论】:

  • 试试 fiddler 看看到底传递了什么。
  • 不幸的是,api 只能在 https 上运行,所以它全部加密并且没有多大帮助:(
  • 啊,是的,我没想到...
  • 您是否尝试过在发送请求之前指定内容类型(我曾经遇到过这种情况)? client.DefaultRequestHeaders.Accept.Clear() _client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"))
  • 很遗憾没有效果,还有其他想法吗?

标签: vb.net httpclient asp.net-web-api eventbrite postman


【解决方案1】:

我得到401 Unauthorized 的原因是,当我最初调用api 时,我正在查询https://www.eventbriteapi.com/v3/events/search?organizer.id=77181XXXXX

此网址无效,应为https://www.eventbriteapi.com/v3/events/search/?organizer.id=77181XXXXX(注意搜索后的额外/)

Eventbrite 自动将我重定向到正确的 URL,但是它丢失了身份验证标头,因此未经授权。

工作 VB.Net 代码:

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

【讨论】:

  • 在我的情况下,我测试了“swagger”并将我重定向到“swagger/index.html”
【解决方案2】:

我遇到了类似的问题。 构建 .net 应用程序,我使用的是 HttpClient 类。我调用的网址是“http”,服务器将其重定向到 https。显然这会删除标题。不是通过邮递员发生的!

解决方法:使用httpS

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-22
    • 2017-11-23
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    相关资源
    最近更新 更多