Ошибка 400 НЕВЕРНОГО запроса при попытке отправить json в api (Sendgrid) в качестве информации электронной почты

#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 Studio Paste JSON as Classes , это будет неправильно.