Я пытаюсь создать httpwebrequest в vb.net для POST для suitecrm, но каждый раз получаю неверный логин.Проблема, по-видимому, связана с самим содержимым JSON, потому что он прекрасно работает, если я сделаю его частью URL-адреса.
Сначала я создаю объект newtonsoft JObject:
Dim jobjReq = New Newtonsoft.Json.Linq.JObject(New Newtonsoft.Json.Linq.JProperty(
"user_auth",
New Newtonsoft.Json.Linq.JObject(
New Newtonsoft.Json.Linq.JProperty("user_name", username),
New Newtonsoft.Json.Linq.JProperty("password", Security.HashStringMD5(password))
))
)
Dim jobjReq2 = New Newtonsoft.Json.Linq.JObject(New Newtonsoft.Json.Linq.JProperty("rest_data", jobjReq))
Эторезультирующий JSON, который создается
{
"rest_data": {
"user_auth": {
"user_name": "XXXXXX",
"password": "XXXXXXXXXXXXXXXXX"
}
}
}
и передается этой функции:
Public Sub New(urlString As String, method As String, jsonObject As Newtonsoft.Json.Linq.JObject)
Dim uri As New Uri(urlString)
httpRequest = DirectCast(System.Net.WebRequest.Create(uri), System.Net.HttpWebRequest)
Try
With httpRequest
.Method = method
.KeepAlive = True
.UserAgent = "Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1C25 Safari/419.3"
.ContentType = "application/json"
Dim stringReq = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObject)
Dim byteData As Byte() = System.Text.Encoding.UTF8.GetBytes(stringReq)
.ContentLength = byteData.Length
Dim postreqstream As System.IO.Stream = .GetRequestStream()
postreqstream.Write(byteData, 0, byteData.Length)
postreqstream.Close()
End With
Catch exception As System.Net.WebException
MsgBox(exception.Status.ToString & vbLf & exception.Message.ToString & vbLf)
End Try
Он возвращается с неверным логином каждый раз, независимо от того, что я пытаюсь.
Тем не менее, если я сериализую JObject и соединю его с URL-адресом следующим образом: http://XXX.XXX.XXX.XXX/SuiteCRM/service/v4_1/rest.php?method=login&input_type=JSON&response_type=JSON&rest_data={"user_auth":{"user_name":"XXXXX","password":"XXXXXXXXXXXX"}} Он работает просто отлично.
Я отлично справляюсь со вторым способом и могу отлично публиковать и получать записи, за исключением того, что теперь мне нужно опубликовать большую запись, и я превышаю ограничение длины URL
Любая помощь будет принята с благодарностью.