Vb.net 400使用http post查询microsoft graph时请求错误

Vb.net 400使用http post查询microsoft graph时请求错误,vb.net,microsoft-graph-api,http-post,bad-request,request-headers,Vb.net,Microsoft Graph Api,Http Post,Bad Request,Request Headers,我一直在用MicrosoftGraph做一些测试,我似乎遇到了麻烦;不知是否有人能给我一个正确的方向 以下代码来自我的测试应用程序(vb) GetNewToken()函数工作正常,我检索到的有效令牌没有问题 当我尝试使用该令牌查询用户时,我得到了400个错误的请求-没有其他信息;就这样 我已经检查了我的POST请求的标题,并尝试了几种不同的方法,但似乎无法克服这一点;据我所知,我的请求的格式与Microsoft Graph文档中指定的格式相同 我也用谷歌搜索了一下,看看是否有什么明显的或简单的东

我一直在用MicrosoftGraph做一些测试,我似乎遇到了麻烦;不知是否有人能给我一个正确的方向

以下代码来自我的测试应用程序(vb)

GetNewToken()函数工作正常,我检索到的有效令牌没有问题

当我尝试使用该令牌查询用户时,我得到了400个错误的请求-没有其他信息;就这样

我已经检查了我的POST请求的标题,并尝试了几种不同的方法,但似乎无法克服这一点;据我所知,我的请求的格式与Microsoft Graph文档中指定的格式相同

我也用谷歌搜索了一下,看看是否有什么明显的或简单的东西我忽略了;我看过一些关于这个主题的帖子,其中有人建议先设置授权头,然后再做其他事情——我试过了,结果没有什么不同。 一些人还建议将Accept设置为“application/json”;我也试过了,没什么区别

我已经将一些细节输出到gui,并抓取了一个屏幕截图,以便您可以看到我看到的内容。。。

有趣的是,如果我在获取令牌之前尝试“查询用户”,我会得到一个401 unauthorized,这表明请求本身工作正常

正如我所提到的,这是一个测试应用程序,而我得到了一些功能工作(一些数据由于明显的原因被掩盖);在这一点上,我并不关心代码的整洁或诸如此类的事情

如果有人能帮上忙,我们将不胜感激


提前感谢。

根据文档()您应该提交GET请求,而不是POST请求。我不确定它为什么不返回405,因为它可能应该返回。请提供相关id和错误消息的时间戳。您是否仍在寻求有关此方面的帮助question@David是现场的-它必须是一个GET,而不是一个帖子:)
 Imports System.Net
 Imports System.Text
 Imports System.IO
 Imports Newtonsoft.Json.Linq
 
 
 Class MainWindow
 
     Public Shared graph_url As String = "https://graph.microsoft.com/v1.0/"
     Public Shared br As String = ControlChars.NewLine
 
     Dim myscope As String = "https://graph.microsoft.com/.default"
     Dim mysecret As String = "zzx...BX-"
     Dim mytenantid As String = "7aa6d...d409199"
     Dim myclientid As String = "4e37...5a59"
     Dim myuri As String = "https://login.microsoftonline.com/" & mytenantid & "/oauth2/v2.0/token"
     Dim mytoken As String = ""
 
 
     Public Function HTTP_Post(ByVal url As String, ByVal postdata As String)
         Try
             Dim encoding As New UTF8Encoding
             Dim postReq As HttpWebRequest = DirectCast(WebRequest.Create(url), HttpWebRequest)
             postReq.Headers.Add("Authorization", "Bearer " & mytoken)
             postReq.Method = "POST"
             postReq.PreAuthenticate = True
             Dim postreqstream As Stream = postReq.GetRequestStream()
             If Not postdata = Nothing Then
                 Dim byteData As Byte() = encoding.GetBytes(postdata)
                 postreqstream.Write(byteData, 0, byteData.Length)
             End If
             postreqstream.Close()
             request_header.Text = postReq.Headers.ToString
             Dim postresponse As HttpWebResponse = DirectCast(postReq.GetResponse(), HttpWebResponse)
             Dim postreqreader As New StreamReader(postresponse.GetResponseStream())
             Dim response As String = postreqreader.ReadToEnd
             Return (response)
         Catch ex As Exception
             user_results.Text = ex.Message.ToString
         End Try
     End Function
 
     Public Function GetNewToken()
         Console.WriteLine(myuri)
         Dim post_data As String = "client_id=" & myclientid & "&client_secret=" & mysecret & "&scope=" & myscope & "&grant_type=client_credentials"
         Dim token As String = HTTP_Post(myuri, post_data)
         get_result.Text = JObject.Parse(token).SelectToken("access_token")
         mytoken = JObject.Parse(token).SelectToken("access_token")
     End Function
 
     Private Sub Button_Click(sender As Object, e As RoutedEventArgs)
         GetNewToken()
     End Sub
 
     Private Sub usrget_Copy_Click(sender As Object, e As RoutedEventArgs) Handles usrget_Copy.Click
         Dim url As String = "https://graph.microsoft.com/v1.0/users/*{myUPN}*"
         Dim post_data As String = Nothing
         Dim return_data As String = HTTP_Post(url, post_data)
         req_url.Text = url
     End Sub
 End Class