Выдает ошибку при отправке post запроса на сайт kad.arbitr.ru
Хочу отправить пост запрос на Этот сайт, но выдает ошибку: "ссылка на обьект не указывает на экземпляр обьекта". В чем проблема?
using System;
using System.Net.Http;
using System.Windows.Forms;
using System.Text.Json;
using System.Threading.Tasks;
namespace WinFormsApp4
{
public partial class Form1 : Form
{
HttpResponseMessage response;
string Address = "https://kad.arbitr.ru/Kad/SearchInstances";
class Search {
public int Page { get; set; }
public int Count { get; set; }
public string[] Courts { get; set; }
public DateTime? DateFrom { get; set; }
public DateTime? DateTo { get; set; }
public Sides[] Sides { get; set; }
public Judges[] Judges { get; set; }
public string[] CaseNumbers { get; set; }
public bool WithVKSInstances { get; set; }
}
class Sides
{
public string Name { get; set; }
public int Type { get; set; }
public bool ExactMatch { get; set; }
}
class Judges
{
public string JudgeId { get; set; }
public int Type { get; set; }
}
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
Search search = new Search()
{
CaseNumbers = Array.Empty<string>(),
Page = 1,
Count = 25,
Courts = Array.Empty<string>(),
DateFrom = null,
DateTo = null,
Sides = Array.Empty<Sides>(),
Judges = Array.Empty<Judges>(),
WithVKSInstances = false
};
try
{
PostRequest(search);
label2.Text += response.Content.ToString();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private async void PostRequest(Search data)
{
Uri uri = new Uri(Address);
HttpContent content = new StringContent(JsonSerializer.Serialize(data));
HttpClient http = new HttpClient();
response = await http.PostAsync(uri, content);
}
}
}
Ответы (1 шт):
Автор решения: Alexander Petrov
→ Ссылка
async void - никогда так не делайте.
HttpClient сделайте полем:
private readonly HttpClient http = new HttpClient();
Измените метод следующим образом:
private async Task<HttpResponseMessage> PostRequest(Search data)
{
Uri uri = new Uri(Address);
HttpContent content = new StringContent(JsonSerializer.Serialize(data));
return await http.PostAsync(uri, content);
}
Обработчик события. Тут async void, но это вынужденно.
private async void button1_Click(object sender, EventArgs e)
{
Search search = ...
try
{
var response = await PostRequest(search);
label2.Text += response.Content.ToString();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}