Неверные параметры запроса - PullRequest
0 голосов
/ 05 февраля 2020

Добрый день, я делал небольшую разработку в C #, для запроса в HTTP POST.

У меня следующая проблема, при попытке в c # следующее не сработало для меня

using RestSharp;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;
using System.IO;
using Newtonsoft.Json.Linq;

namespace App_Llamadas_API
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        [Obsolete]
        private void button1_Click(object sender, EventArgs e)
        {
            //URL:
            var client = new RestClient("Hidden URL");
            var request = new RestRequest("/", Method.POST);

            //Headers:
            request.AddHeader("X-Authorization", "Hidden Token");
            request.AddHeader("Content-Type", "application/json");

            //Body json:
            request.AddParameter(
            "application/json",
            "{ \"taskRelativePath\": \"My Tasks\\VPN.atmx\", \"botRunners\": [{ \"client\": \"DESKTOP -Hidden name\", \"user\": \"botrunner03\"}], \"runWithRDP\": \"true\" }", // <- your JSON string
             ParameterType.RequestBody);

            IRestResponse response = client.Execute(request);

            var content = response.Content;

            txtResponse.Text = content;

        }

    }
}

ответ: {"code": "json .deserialization.exception", "details": null, "message": "Недопустимые параметры запроса"}

1 Ответ

0 голосов
/ 09 февраля 2020

Запрос недействителен, потому что JSON неправильно экранирован. Вам необходимо экранировать каждую обратную косую черту в My Tasks\\VPN.

"{ \"taskRelativePath\": \"My Tasks\\\\VPN.atmx\", \"botRunners\": [{ \"client\": \"DESKTOP -Hidden name\", \"user\": \"botrunner03\"}], \"runWithRDP\": \"true\" }");

В противном случае он будет читать JSON следующим образом (обратите внимание, что есть только одна обратная косая черта sh):

{
  "taskRelativePath": "My Tasks\VPN.atmx",  <-- invalid JSON
  "botRunners": [
    {
      "client": "DESKTOP -Hidden name",
      "user": "botrunner03"
    }
  ],
  "runWithRDP": "true"
}

С RestSharp вы можете использовать request.AddJsonBody для создания своих JSON полезных нагрузок, так как это то, для чего это было сделано, и вам не нужно беспокоиться о кавычках. Это будет использовать Simple Json для сериализации объекта.

request.AddJsonBody(new
{
    taskRelativePath = "My Tasks\\\\VPN.atmx",
    botRunners = new[]
    {
        new { client = "DESKTOP -Hidden name", user = "botrunner03" }
    },
    runWithRDP = "true",
});

...