LegioSoft.Radar.SDK
2.0.0
Prefix Reserved
dotnet add package LegioSoft.Radar.SDK --version 2.0.0
NuGet\Install-Package LegioSoft.Radar.SDK -Version 2.0.0
<PackageReference Include="LegioSoft.Radar.SDK" Version="2.0.0" />
<PackageVersion Include="LegioSoft.Radar.SDK" Version="2.0.0" />
<PackageReference Include="LegioSoft.Radar.SDK" />
paket add LegioSoft.Radar.SDK --version 2.0.0
#r "nuget: LegioSoft.Radar.SDK, 2.0.0"
#:package LegioSoft.Radar.SDK@2.0.0
#addin nuget:?package=LegioSoft.Radar.SDK&version=2.0.0
#tool nuget:?package=LegioSoft.Radar.SDK&version=2.0.0
LegioSoft.Radar.SDK
.NET SDK for the LegioSoft Radar service IP lookup API.
Package
- Package ID:
LegioSoft.Radar.SDK - Version:
2.0.0 - Target frameworks:
.NET 6.0,.NET 7.0,.NET 8.0,.NET 9.0,.NET 10.0 - License: Apache-2.0
Installation
dotnet add package LegioSoft.Radar.SDK
Version 2 matches the current Radar response. It removes the obsolete
FraudScore, Proxy, LegioRadarProxyInfo, LegioRadarProxyTypes, and
ProxyLookupFailed members. Use IsProxy and Classification for proxy and risk
decisions. Authentication uses X-Client-ID and X-API-Key request headers, so
credentials are never placed in lookup URLs.
Setup
using LegioSoft.Radar.SDK.DependencyInjection;
builder.Services.AddLegioRadar(options =>
{
options.BaseAddress = new Uri("https://radar.example.com");
options.ClientId = "client-a";
options.ApiKey = "<api_key>";
options.Cache.Enabled = true;
options.Cache.KeyPrefix = "legio-radar:lookup:";
options.Retry.MaxRetries = 2;
});
Lookup
Inject ILegioRadarClient anywhere you normally use application services, then call
LookupAsync with an IPv4 or IPv6 address.
Minimal API example:
using LegioSoft.Radar.SDK.Abstractions;
using LegioSoft.Radar.SDK.Public;
app.MapGet("/risk/ip/{ipAddress}", async (
string ipAddress,
ILegioRadarClient radarClient,
CancellationToken cancellationToken) =>
{
var result = await radarClient.LookupAsync(ipAddress, cancellationToken);
if (result.IsNotFound)
{
return Results.NotFound(new { error = "IP address was not found." });
}
if (result.IsError)
{
return Results.Problem(result.Error?.Message, statusCode: (int)result.StatusCode);
}
var lookup = result.Value!;
return Results.Ok(new
{
lookup.IP,
lookup.CountryCode,
lookup.CountryName,
lookup.IsProxy,
Verdict = lookup.Classification.Verdict,
Confidence = lookup.Classification.Confidence,
Allow = lookup.Classification.Verdict == LegioRadarClassificationVerdict.LikelyHumanNetwork
});
});
Service example:
using LegioSoft.Radar.SDK.Abstractions;
using LegioSoft.Radar.SDK.Public;
public sealed class IpRiskService
{
private readonly ILegioRadarClient _radarClient;
public IpRiskService(ILegioRadarClient radarClient)
{
_radarClient = radarClient;
}
public async Task<bool> ShouldChallengeAsync(string ipAddress, CancellationToken cancellationToken = default)
{
var result = await _radarClient.LookupAsync(ipAddress, cancellationToken);
if (result.IsNotFound)
{
return true;
}
var lookup = result.EnsureSuccess();
return lookup.IsProxy ||
lookup.Classification.IsLikelyBot ||
lookup.Classification.Verdict is LegioRadarClassificationVerdict.HostingOrDatacenter
or LegioRadarClassificationVerdict.ProxyOrAnonymizer
or LegioRadarClassificationVerdict.Suspicious;
}
}
Direct result handling:
var result = await radarClient.LookupAsync("8.8.8.8", cancellationToken);
if (result.IsSuccess)
{
var lookup = result.Value;
var verdict = lookup!.Classification.Verdict;
if (verdict == LegioRadarClassificationVerdict.LikelyHumanNetwork)
{
// Apply application policy.
}
}
if (result.ErrorCode == LegioRadarErrorCode.LookupNotFound)
{
// Handle lookup miss.
}
See Lookup SDK for the full result shape, error handling, cache, and retry options.
Build
dotnet build LegioSoft.Radar.SDK.sln
Pack
dotnet pack src/LegioSoft.Radar.SDK/LegioSoft.Radar.SDK.csproj -c Release
Documentation
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 is compatible. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.Caching.Memory (>= 8.0.1)
- Microsoft.Extensions.Http (>= 8.0.1)
-
net6.0
- Microsoft.Extensions.Caching.Memory (>= 8.0.1)
- Microsoft.Extensions.Http (>= 8.0.1)
-
net7.0
- Microsoft.Extensions.Caching.Memory (>= 8.0.1)
- Microsoft.Extensions.Http (>= 8.0.1)
-
net8.0
- Microsoft.Extensions.Caching.Memory (>= 8.0.1)
- Microsoft.Extensions.Http (>= 8.0.1)
-
net9.0
- Microsoft.Extensions.Caching.Memory (>= 8.0.1)
- Microsoft.Extensions.Http (>= 8.0.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version 2 removes the obsolete nested proxy details and fraud score.
Features:
- Dependency injection setup through AddLegioRadar(options)
- Typed HttpClient-based IP lookup client
- Optional X-Client-ID and X-API-Key authentication headers
- Configurable retry settings for transient transport and service failures
- In-memory caching for successful lookup results
- Fluent result model with success/error helpers
- Proxy detection through IsProxy and classification verdicts
- Public enums and constants for lookup classifications, errors, and network types