theskrutter
@theskrutter

Запрос отменён. Невозможно закрыть поток до завершения записи всех байтов?

У меня есть мини-лаунчер для майнкрафта, мне надо сделать авторизацию пользователя.
Вот код:
var webRequest = System.Net.WebRequest.Create("https://authserver.mojang.com/authenticate");
if (webRequest != null)
{
	string reqContent = "{\"agent\": {\"name\": \"Minecraft\",\"version\": 1},\"username\": \"" + auth_player_name.Text + "\",\"password\": \"" + auth_player_password.Text + "\",\"clientToken\": \"" + NewMCUUID().ToString() + "\",\"requestUser\": true}";
	byte[] bytes = Encoding.UTF8.GetBytes(reqContent.ToArray());

	webRequest.Method = "POST";
	webRequest.Timeout = Timeout.Infinite;
	webRequest.ContentType = "application/json";
	webRequest.ContentLength = bytes.Length;

	using (Stream s = webRequest.GetRequestStream())
	{
		using (StreamWriter sw = new StreamWriter(s))
		{
			sw.Write(bytes);
		}
	}
	using (Stream s = webRequest.GetResponse().GetResponseStream())
	{
		using (StreamReader sr = new StreamReader(s))
		{
			MessageBox.Show(sr.ReadToEnd());
		}
	}
}

Код очень примитивный, ведь я делаю костиль для лаунчера.
Ребят, помогите пожалуйста =3
  • Вопрос задан
  • 300 просмотров
Решения вопроса 1
@cicatrix
было бы большой ошибкой думать
Такое чувство, что дело в Using.
У объекта, который заключён внутри Using при выходе из него автоматически вызывается Dispose().
И поток, в который ты записал POST данные, отправляется в сборщик мусора, ещё до отправки.
SW тебе вообще не нужен, если ты туда байты записываешь, можно и сразу в поток писать.
В общем, убери using и явно вызывай Dispose после завершения запроса.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы