Я работал над проектом, который получает результаты с остальных серверов через httprequests.В этом случае я попытался и преуспел (вчера этот же код работал.) В поиске страны и получении ее флага для dipslay.
Я сузил, что функция "makeRequest" вешает мою программу.
повесив трубку, я имею в виду, что я не могу даже закрыть форму, нажав «x» в правом верхнем углу, и вынужден принудительно выйти, нажав «stop debugg».
Любые намеки на то, что я делаю неправильно или пошло не так, будут с благодарностью.
Код, используемый в форме:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ApiQueryHandler
{
abstract class QueryCreator
{
static public string createQueryLandcode(String country)
{
string queryStandaard = "https://restcountries.eu/rest/v2/name/";
string queryLandCode = "?fields=alpha2Code";
string query = queryStandaard + country + queryLandCode;
return query;
}
static public string makeRequest(string query)
{
WebRequest request = WebRequest.Create(query);
request.Credentials = CredentialCache.DefaultCredentials;
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
string responseFromServer = reader.ReadToEnd();
reader.Close();
dataStream.Close();
response.Close();
return responseFromServer;
}
static public string createQueryFlag(string country)
{
string queryStandaard = "https://restcountries.eu/rest/v2/name/";
string queryFlag = "?fields=flag";
string query = queryStandaard + country + queryFlag;
return query;
}
static public string getSVGFlagUrl(string queryResponseFlag)
{
String beginUrl = queryResponseFlag.Substring(10);
int endUrl = beginUrl.IndexOf('"');
String url = queryResponseFlag.Substring(10,endUrl);
return url;
}
static public string getPNGFlagUrl(string landCode)
{
string PNGUrl = "https://www.countryflags.io/"+landCode+"/flat/64.png";
return PNGUrl;
}
static public string getCode(string queryResponseCode)
{
String beginCode = queryResponseCode.Substring(16);
int endCode = beginCode.IndexOf('"');
String code = queryResponseCode.Substring(16, endCode);
return code;
}
static public string getCodeShort(string queryResponseCode)
{
String beginCode = queryResponseCode.Substring(10);
int endCode = beginCode.IndexOf('"');
String code = queryResponseCode.Substring(10, endCode-1);
return code;
}
}
}
Код формы:
private void textBoxCounrty_TextChanged(object sender, EventArgs e)
{
string country = textBoxCountry.Text;
string queryLandcode = QueryCreator.createQueryLandcode(country);
string queryFlag = QueryCreator.createQueryFlag(country);
try
{
string responseLandcode = QueryCreator.makeRequest(queryLandcode);
string responseFlag = QueryCreator.makeRequest(queryFlag);
string SVGUrl = QueryCreator.getSVGFlagUrl(responseFlag);
labelURLQuery.Text = queryLandcode;
string processedLandcode = QueryCreator.getCode(responseLandcode);
string PNGUrl = QueryCreator.getPNGFlagUrl(processedLandcode);
richTextBoxServerResponse.Text = responseLandcode+"\n\n"+processedLandcode+"\n\n"+PNGUrl+"\n\n"+SVGUrl;
pictureBoxFlag.Load(PNGUrl);
labelERROR.Text = "";
}
catch (WebException)
{
labelERROR.Text = "404 not found";
}
catch (ArgumentException)
{
labelERROR.Text = "404 not found";
}
}