CVR-opslag i C# og .NET

I .NET kan du hente CVR-data med HttpClient og deserialisere svaret direkte til dine egne records. Du behøver ingen NuGet-pakker ud over det, der følger med .NET.

Slå en virksomhed op på CVR-nummer

Eksemplet er et top-level program til .NET 6 og nyere. Records'ene indeholder kun de felter, du har brug for. Resten ignoreres.

csharp
using System.Net;
using System.Net.Http.Json;
using System.Text.Json.Serialization;

var http = new HttpClient { BaseAddress = new Uri("https://apicvr.dk/") };

async Task<Company?> GetCompany(int cvr)
{
    var res = await http.GetAsync($"api/v1/{cvr}");
    if (res.StatusCode == HttpStatusCode.NotFound) return null;
    res.EnsureSuccessStatusCode(); // 422 or 502 throws
    return await res.Content.ReadFromJsonAsync<Company>();
}

var company = await GetCompany(24256790);
Console.WriteLine($"{company!.Name}, {company.Zipcode} {company.City}");

foreach (var owner in company.Ejere)
    Console.WriteLine($"{owner.Name} {owner.OwnershipRange}");

record Company(
    [property: JsonPropertyName("vat")] int Vat,
    [property: JsonPropertyName("name")] string Name,
    [property: JsonPropertyName("zipcode")] int? Zipcode,
    [property: JsonPropertyName("city")] string? City,
    [property: JsonPropertyName("protected")] bool? Protected,
    [property: JsonPropertyName("ejere")] List<Owner> Ejere);

record Owner(
    [property: JsonPropertyName("name")] string? Name,
    [property: JsonPropertyName("ownership_range")] string? OwnershipRange);

Søg på virksomhedsnavn

csharp
var hits = await http.GetFromJsonAsync<List<Hit>>(
    "api/v1/search/fuzzy/" + Uri.EscapeDataString("novo nordisk"));

foreach (var hit in hits!.Take(5))
    Console.WriteLine($"{hit.CvrNumber} {hit.Name}");

record Hit(
    [property: JsonPropertyName("name")] string Name,
    [property: JsonPropertyName("cvr_number")] int CvrNumber,
    [property: JsonPropertyName("industrytext")] string? IndustryText);

Håndter fejl

StatusBetydning
200Virksomheden blev fundet. Svaret er JSON.
404Der findes ingen virksomhed med det CVR-nummer. Body: {"detail": {"error": "NOT_FOUND"}}
422CVR-nummeret er ikke et tal.
502CVR-registret svarede ikke. Prøv igen om lidt.

EnsureSuccessStatusCode() kaster en HttpRequestException ved 422 og 502. Fang den, hvis du vil prøve igen.

Tjek altid protected, før du bruger data til markedsføring. Er feltet true, har virksomheden frabedt sig reklamehenvendelser.

Ofte stillede spørgsmål

Hvordan bruger jeg HttpClient i ASP.NET Core?

Registrér en typed client med builder.Services.AddHttpClient<CvrClient>() i stedet for at oprette nye HttpClient-instanser pr. kald.

Hvorfor er feltnavnene på dansk?

Felter som ejere og direktion følger CVR-registrets egne begreber. Med JsonPropertyName kan du give dem engelske navne i din kode.