Vb.net 400使用http post查询microsoft graph时请求错误
我一直在用MicrosoftGraph做一些测试,我似乎遇到了麻烦;不知是否有人能给我一个正确的方向 以下代码来自我的测试应用程序(vb) GetNewToken()函数工作正常,我检索到的有效令牌没有问题 当我尝试使用该令牌查询用户时,我得到了400个错误的请求-没有其他信息;就这样 我已经检查了我的POST请求的标题,并尝试了几种不同的方法,但似乎无法克服这一点;据我所知,我的请求的格式与Microsoft Graph文档中指定的格式相同 我也用谷歌搜索了一下,看看是否有什么明显的或简单的东西我忽略了;我看过一些关于这个主题的帖子,其中有人建议先设置授权头,然后再做其他事情——我试过了,结果没有什么不同。 一些人还建议将Accept设置为“application/json”;我也试过了,没什么区别 我已经将一些细节输出到gui,并抓取了一个屏幕截图,以便您可以看到我看到的内容。。。 有趣的是,如果我在获取令牌之前尝试“查询用户”,我会得到一个401 unauthorized,这表明请求本身工作正常 正如我所提到的,这是一个测试应用程序,而我得到了一些功能工作(一些数据由于明显的原因被掩盖);在这一点上,我并不关心代码的整洁或诸如此类的事情 如果有人能帮上忙,我们将不胜感激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文档中指定的格式相同 我也用谷歌搜索了一下,看看是否有什么明显的或简单的东
提前感谢。根据文档()您应该提交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