C # Передача Json в HTTP Post Request - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь передать строку Json в качестве параметра для HttpWebRequest вместе с URL-адресом. Запрос ударит по методам нормально, но каждый раз параметры равны нулю. Я пытался следовать многим подобным примерам, но безуспешно: Как отправить данные JSON в POST-запросе с использованием C #

Вот пример объекта, который будет сериализован и передан

Amount amount = new Amount
{
    currencyCode = "EUR",
    amount = 1234
}
string JsonParameters = amount.ToJson();
var result = Methods.ExecuteHttpPostRequestWithJson("http://localhost:51581/Home/Test", JsonParameters);

Параметры Json корректно сериализуются в

{"currencyCode":"EUR","amount":1234}

Вот метод, который я пытаюсь создать. Я пробовал несколько способов, но каждый раз они становятся нулевыми.

Вот метод, который будет называться

public static string ExecuteHttpPostRequestWithJson(string URL, string Json)
    {
        string result = "";
        var httpWebRequest = (HttpWebRequest)WebRequest.Create(URL);
        httpWebRequest.ContentType = "application/json";
        httpWebRequest.Method = "POST";
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;

        using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
        {;
            streamWriter.Write(Json);
            streamWriter.Flush();
            streamWriter.Close();
        }

        var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
        using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
        {
            result = streamReader.ReadToEnd();
        }

        return result;
    }

Вот метод, который получает правильное попадание, но с нулевыми параметрами как для currencyCode, так и для суммы.

[HttpPost]
public JsonResult Test(string currencyCode, string amount)
{
    return Json(new
    {
        Test = "It worked"
    });
}

1 Ответ

0 голосов
/ 08 мая 2018

В дополнение к тому, что было предложено в комментарии Нуман Бхатти - определение класса суммы в вашем сервисе, а также обновление сигнатуры метода POST вашего сервиса для ожидания этого объекта - также используйте [FromBody] атрибут

класс

new Amount
{
    currencyCode = "EUR",
    amount = 1234
}

Новая подпись метода POST

[HttpPost]
public JsonResult Test([FromBody]Amount amount)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...