CVR api i Visual Studio

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
CVR api i Visual Studio

Indlæg af mr.kurstein » 14. apr 2018, 17:19

Hej folkens,

Jeg er ny her på forum, men jeg er simpelthen gået i stå ift. at få en api til at virke.
Det drejer sig om http://cvrapi.dk/ hvor jeg gerne i mit program vil kunne hente CVR oplysninger.

Jeg har forsøgt at tage det kode eksempel de har på hjemmesiden:

Kode: Vælg alt

using System;
using System.Net;

/*
Hoejre klik paa 'References' i 'Solution Explorer'
Tryk paa 'Add reference'
Oeverst i hoejre hjoerne soeger du blot efter 'web.extensions'
System.Web.Extensions skal tilfoejes som reference.
*/

namespace cvropslag
{
	class Program {
		static void Main(string[] args)
		{
			ApiResult company = GetCompanyInfo("10150817");
			Console.WriteLine("Test: " + company.Name + " - " + company.Version);
			Console.ReadLine();
		}

		public class ApiOwners
		{
			public string Name { get; set; }
		}

		public class ApipPoductionunits
		{
			public string Pno { get; set; }
			public string Name { get; set; }
			public string Address { get; set; }
			public string Zipcode { get; set; }
			public string City { get; set; }
			public bool @protected { get; set; }
			public string Phone { get; set; }
			public string Email { get; set; }
			public string Fax { get; set; }
			public string Startdate { get; set; }
			public string Enddate { get; set; }
			public string Employees { get; set; }
			public string Addressco { get; set; }
			public int Industrycode { get; set; }
			public string Industrydesc { get; set; }
			public int Companycode { get; set; }
			public string Companydesc { get; set; }
			public string Creditstartdate { get; set; }
			public int? Creditstatus { get; set; }
			public bool Creditbankrupt { get; set; }
		}

		public class ApiResult
		{
			public string VAT { get; set; }
			public string Name { get; set; }
			public string Address { get; set; }
			public string Zipcode { get; set; }
			public string City { get; set; }
			public bool @protected { get; set; }
			public string Phone { get; set; }
			public string Email { get; set; }
			public string Fax { get; set; }
			public string Startdate { get; set; }
			public string Enddate { get; set; }
			public string Employees { get; set; }
			public string Addressco { get; set; }
			public int Industrycode { get; set; }
			public string Industrydesc { get; set; }
			public int Companycode { get; set; }
			public string Companydesc { get; set; }
			public string Creditstartdate { get; set; }
			public int? Creditstatus { get; set; }
			public bool Creditbankrupt { get; set; }
			public ApiOwners[] Owners { get; set; }
			public ApipPoductionunits[] Productionunits { get; set; }
			public int T { get; set; }
			public int Version { get; set; }

		}

		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;
		}
	}
}
Dertil har jeg også under resources, tilføjet web.extensions.

Når jeg kører programmet returneres værdien 0, og uanset om jeg ændrer string i getcompanyinfo til et andet CVR nummer, er det samme resultat.
Jeg har også forsøgt ved at ændre "user-agent" og "mit projekt" - uden held

Er der en som har et bud på hvad filan jeg gør forkert?

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

Re: CVR api i Visual Studio

Indlæg af jepperask » 14. apr 2018, 21:23

Kan du prøve og indsætte dit output? Hvad mener du når du siger at værdien 0 returneres?

Jeg sidder på Ubuntu, så jeg kører .NET Core, og har derfor skiftet:

Kode: Vælg alt

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

Kode: Vælg alt

res = JsonConvert.DeserializeObject<ApiResult>(resultContent);
.. og jeg får resultatet: Test: Erhvervsstyrelsen - 6

mr.kurstein
Begynder
Indlæg:4
Tilmeldt:14. apr 2018, 17:13

Re: CVR api i Visual Studio

Indlæg af mr.kurstein » 15. apr 2018, 10:01

Hej Jeppe,

Jeg får resultatet: - 0

Så den udelader company.name indsætter bindestreg og returnerer version 0

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

Re: CVR api i Visual Studio

Indlæg af jepperask » 15. apr 2018, 10:37

Ah, jeg forstår. Hvad prøvede du at ændre User-Agent til?

Problemet er, at når User-Agent er "mit projekt", returneres der noget JSON med en fejlmeddelse.

Deserialize<ApiResult> thrower ikke en exception hvis noget tilfældigt JSON ikke passer ned i klassen, men der returneres i stedet bare et tomt objekt.

Man kan sætte attributten "[JsonObject(ItemRequired = Required.Always)]" (ihvertfald i .NET Core) over klassen, og så vil du få en exception hvis et felt mangler.

Prøv at sætte User-Agent sådan her, så går fejlen væk hos mig (erstat evt. med noget mere beskrivende om dit projekt):

Kode: Vælg alt

webClient.Headers["User-Agent"] = "kmefkmef";

mr.kurstein
Begynder
Indlæg:4
Tilmeldt:14. apr 2018, 17:13

Re: CVR api i Visual Studio

Indlæg af mr.kurstein » 15. apr 2018, 10:52

Yes, så virker det også her.!

Jeg havde forstået det sådan at man skulle ændre "user-agent" til noget andet også.
Tak for hjælpen :)

Besvar