如何解决使用http post
我一直在使用Microsoft Graph进行一些测试,但似乎遇到了麻烦。想知道是否有人可以指导我正确的方向。
以下代码来自我的测试应用(vb)...
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,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
GetNewToken()函数工作正常,我没有问题地检索了有效令牌。
当我尝试使用该令牌查询用户时,我收到400错误的请求-没有此类附加信息;就是这样。
我已经检查了POST请求的标头,并尝试了几种不同的方法,但是似乎无法克服这个问题;据我所知,我的请求是按照Microsoft Graph文档中指定的格式设置的。
还用谷歌搜索了地狱,看是否有我忽略的明显或简单的事情;我看过一些关于此主题的帖子,人们建议在其他任何内容之前先设置Authorization标头-我尝试过,但没有任何区别。 一些人还建议将Accept设置为'application / json'。我也试过了,没关系。
我已将一些详细信息输出到gui并获取了屏幕截图,以便您可以看到我所看到的...
有趣的是,如果我在获取令牌之前尝试使用“查询用户”,则会遭到401未经授权,这表明请求本身正在正常工作。
正如我所提到的,这是一个测试应用程序,同时我可以使用某些功能(由于明显的原因,一些数据被遮盖了);我现在不担心代码的整洁程度。
如果有人能够提供帮助,那就非常有用了。
谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。