Передача пользовательского объекта в конечную точку REST с помощью C # - PullRequest
0 голосов
/ 16 октября 2019

У меня есть конечная точка покоя, которая принимает один пользовательский параметр объекта, содержащий два свойства.

Давайте назовем параметр InfoParam

public class InfoParam
{
    public long LongVar { get; set; }
    public string StringVar { get; set; }
}

Мой код выглядит следующим образом:

infoParam.LongVar = 12345678;
infoParam.StringVar = "abc"

var myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "POST";

var content = string.Empty;

using (var theResponse = (HttpWebResponse)MyRequest.GetResponse())
{
    using (var stream = theResponse.GetResponseStream())
    {
        using (var sr = new StreamReader(stream))
        {
            content = sr.ReadToEnd();
        }
    }
}

Итак, у меня есть переменная InfoParam с двумя значениями, но я не могу понять, где передать ее в конечную точку REST.

Ответы [ 2 ]

1 голос
/ 16 октября 2019

Вам необходимо превратить объект в поток байтов, который можно добавить в поток запроса, который, в свою очередь, будет отправлен как тело HTTP POST. Формат этих байтов должен соответствовать тому, что ожидает сервер. Конечные точки REST обычно ожидают, что эти байты будут напоминать JSON.

// assuming you have added Newtonsoft.JSON package and added the correct using statements
using (StreamWriter writer = new StreamWriter(myRequest.GetRequestStream()) {
    string json = JsonConvert.SerializeObject(infoParam);
    writer.WriteLine(json);
    writer.Flush();
}

Возможно, вы захотите установить различные другие параметры запроса, такие как заголовок Content-Type.

0 голосов
/ 16 октября 2019

Вы должны написать это в `Content (и установить тип контента). Проверьте Как: отправлять данные с помощью класса WebRequest

Рекомендуется использовать System.Net.Http.HttpClient вместо.

Обратите внимание, что выдолжен знать, какой контент ожидает сервер ('application / x-www-form-urlencoded`, json и т. д.)

Следующий фрагмент взят из данных POST JSON по HTTP

// Construct the HttpClient and Uri. This endpoint is for test purposes only.
        HttpClient httpClient = new HttpClient();
        Uri uri = new Uri("https://www.contoso.com/post");

        // Construct the JSON to post.
        HttpStringContent content = new HttpStringContent(
            "{ \"firstName\": \"Eliot\" }",
            UnicodeEncoding.Utf8,
            "application/json");

        // Post the JSON and wait for a response.
        HttpResponseMessage httpResponseMessage = await httpClient.PostAsync(
            uri,
            content);

        // Make sure the post succeeded, and write out the response.
        httpResponseMessage.EnsureSuccessStatusCode();
        var httpResponseBody = await httpResponseMessage.Content.ReadAsStringAsync();
        Debug.WriteLine(httpResponseBody);

В вашем случае контент будет выглядеть примерно так

HttpStringContent content = new HttpStringContent(
            JsonConvert.SerializeObject(infoParam), // using Json.Net;
            UnicodeEncoding.Utf8,
            "application/json");

...