Exception handling ved api integration

I dette forum kan du stille og svare på spørgsmål om C# programmering. Alle med en interesse for C# er velkommen!
Besvar
mr.kurstein
Begynder
Indlæg:4
Tilmeldt:14. apr 2018, 17:13
Exception handling ved api integration

Indlæg af mr.kurstein » 23. apr 2018, 13:18

Hej,

Jeg forsøger at benytte CVR API's integration i en app, jeg er ved at lave. Problemet er, at hvis man indtaster et forkert/ugyldigt CVR nummer, så crasher appen med en 404 fejlkode.

Jeg forsøger i min kode at håndtere denne fejlmelding men jeg har problemer med at få det tilpasset. I dette setup får jeg en fejlmelding om local res er en unassigned local variable.

Kode: Vælg alt

// Web scraper to snatch information..
        public static ApiResult GetCompanyInfo(string name)
        {
            ApiResult res;
            using (var webClient = new WebClient())
            {
                webClient.Headers["User-Agent"] = "Right People -Fusionprojekt";

                try
                {
                    string resultContent = webClient.DownloadString(string.Format("http://cvrapi.dk/api?search={0}&country=dk", name));
                    res = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ApiResult>(resultContent);
                }

		catch (WebException ex)
                 {
                     if (ex.Status == WebExceptionStatus.ProtocolError && ex.Response != null)
                     {
                         var resp = (HttpWebResponse)ex.Response;
                         if (resp.StatusCode == HttpStatusCode.NotFound)
                         {
                             var dialogResult = MessageBox.Show("CVR nummer er ikke gyldigt", "prøv et nyt", MessageBoxButtons.YesNoCancel);
                         }
                     }

                 }
                return res;
Det originale kodeeksempel inde fra cvrapi.dk ser således ud:

Kode: Vælg alt

		public static ApiResult GetCompanyInfo(string name)
		{
			ApiResult res;
			using(var webClient = new WebClient())
			{
				webClient.Headers["User-Agent"] = "mit projekt";

				string resultContent = webClient.DownloadString(string.Format("http://cvrapi.dk/api?search={0}&country=dk", name));

				res = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<ApiResult>(resultContent);
			}

			return res;
		}
Jeg kan simpelthen ikke hitte ud hvordan man laver en korrekt exception til at håndtere 404.

jepperask
Geni
Geni
Indlæg:378
Tilmeldt:4. nov 2012, 17:57

Re: Exception handling ved api integration

Indlæg af jepperask » 24. apr 2018, 08:14

Problemet er at du ikke initialiserer din res variabel. Du gør det inde i din try-catch, men da det i sin natur kan fejle, får du en compile-fejl da compileren kan forudse at der er scenarier hvor variablen res ikke bliver sat.

Hvis du initialiserer res sådan her, virker det hos mig:

Kode: Vælg alt

ApiResult res = null;
Alternativt skal du returnere res inde i din try-block, og så returnere null i alle andre tilfælde.

Besvar