#json #vb.net #sendgrid
# #json #vb.net #sendgrid
Вопрос:
У меня есть программа, которая имеет последний этап написания электронных писем нескольким клиентам. Файл Excel создается в качестве вложения для отправки этих писем. Я использую api, предоставляемый sendgrid, для отправки электронной почты. Однако при запуске этапа getresponse я получаю исключение: «400 bad request». Я попытался проверить правильность ключа api и URL-адреса с помощью postman. Это было успешно, поэтому я думаю, что, возможно, мое преобразование / синтаксис json неверны. Я не уверен, я только начал использовать visual Basic около месяца назад.
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12
Dim attachmentpath As String = strAppPath amp; strFileCompleteDir
Dim uri As String = "URL"
Dim Request As WebRequest = WebRequest.CreateHttp(uri)
Request.Method = "POST"
Request.PreAuthenticate = True
Request.Headers.Add("Authorization", "Bearer 'API_KEY'")
Dim json_data As String = "{'personalizations': [{'To': [{'email': ''To_email''}]}],'from': {'email': 'From_email'},'subject': '[encrypt]Hello, World! test','content': [{'type': 'text/plain', 'value': 'Heya!'}]}"
Request.ContentType = "application/json"
Dim json_bytes() As Byte = Encoding.UTF8.GetBytes(json_data)
Request.ContentLength = json_bytes.Length
Using requeststream = Request.GetRequestStream
requeststream.Write(json_bytes, 0, json_bytes.Length)
End Using
Dim responsecontent As String = Nothing
Using Response = DirectCast(Request.GetResponse, HttpWebResponse),
responseStream = Response.GetResponseStream()
Using reader = New StreamReader(responseStream)
responsecontent = reader.ReadToEnd()
End Using
End Using
Комментарии:
1. JSON должен заключать строки в двойные кавычки:
'personalizations'
->"personalizations"
и т.д. API может быть разумным для этого. Вероятно, вам следует создать объект класса, который описывает параметры WebRequest, и сериализовать его. Я не понимаю, как вы на самом деле устанавливаете токен, но не заключайте его в одинарные кавычки внутриbearer
строки. Вероятно, вам лучше использовать HttpClient. Смотрите пример AuthenticationHeaderValue(строка, строка) .2. Итак, могу ли я создать локальный объект в этом методе? и используйте новый JavaScriptSerializer ()). Сериализовать (объект), чтобы сохранить «» вместо «, и нет apikey при реализации без «.
3. создайте локальный объект : объект класса. Создайте структуру класса (модель), которая описывает JSON. Таким образом, вы также можете проверить
personalizations
, действительно ли объект должен быть массивом. — JSON прост, JavaScriptSerializer в порядке, если у вас неJson.Net
установлен или вы не можете использоватьSystem.Text.Json
4. Есть ли пример кода для этого. и прямо сейчас у меня есть Newtonsoft. Импорт Json. Я не уверен, что его массив здесь — это точная копия и вставленный код json из postman, который работал. {«персонализации»: [{«кому»: [{«электронная почта»: «myemial»}]}], «от»: {«электронная почта»: «aemail»}, «тема»: «[encrypt]Привет, мир! тест»,»содержимое»: [{«тип»: «текст / обычный», «значение»: «Привет!»}]}
5. Прежде всего, просто проверьте, является ли формат JSON причиной ошибки. В VB.Net , просто удвойте двойные кавычки, как в
dim json = "{""personalizations"": [{""to"": [{""email"": ""myemail""}]}],""from"": {""email"": ""aemail""},""subject"": ""[encrypt]Hello, World! test"",""content"": [{""type"": ""text/plain"", ""value"": ""Heya!""}]}"
. Если это принято, то вы можете создать свою структуру классов (модель, как вы хотите ее назвать), поэтому ее проще использовать повторно и сложнее вводить опечатки. Не используйте Visual StudioPaste JSON as Classes
, это будет неправильно.