< Summary

Information
Class: ProjectTemplate.Web.Controllers.Api.ApplicationInformationController
Assembly: ProjectTemplate.Web
File(s): /home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Web/Controllers/Api/ApplicationInformationController.cs
Line coverage
100%
Covered lines: 19
Uncovered lines: 0
Coverable lines: 19
Total lines: 70
Line coverage: 100%
Branch coverage
62%
Covered branches: 5
Total branches: 8
Branch coverage: 62.5%
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.cctor()100%11100%
Get()62.5%88100%
FormatApiVersion(...)100%11100%
AppendDeprecationHeaders()100%11100%

File(s)

/home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Web/Controllers/Api/ApplicationInformationController.cs

#LineLine coverage
 1using Asp.Versioning;
 2using Microsoft.AspNetCore.Mvc;
 3
 4namespace ProjectTemplate.Web.Controllers.Api;
 5
 6/// <summary>
 7/// Provides sample versioned API endpoints for the application.
 8/// </summary>
 9[ApiController]
 10[ApiVersion("1.0")]
 11[ApiVersion("0.9", Deprecated = true)]
 12[Route("api/v{version:apiVersion}/application-information")]
 13[Route("api/application-information")]
 14public sealed class ApplicationInformationController : ControllerBase
 15{
 16    private const string _deprecationHeaderName = "Deprecation";
 17    private const string _sunsetHeaderName = "Sunset";
 18
 219    private static readonly DateTimeOffset _deprecatedVersionSunsetDate =
 220        new(2026, 12, 31, 23, 59, 59, TimeSpan.Zero);
 21
 22    /// <summary>
 23    /// Returns application API information for the requested API version.
 24    /// </summary>
 25    /// <returns>Application API version information.</returns>
 26    [HttpGet]
 27    public ActionResult<ApplicationInformationResponse> Get()
 28    {
 629        ApiVersion requestedVersion = HttpContext.Features
 630            .Get<IApiVersioningFeature>()
 631            ?.RequestedApiVersion ?? new ApiVersion(1, 0);
 32
 633        if (requestedVersion.MajorVersion == 0 && requestedVersion.MinorVersion == 9)
 34        {
 235            AppendDeprecationHeaders();
 36        }
 37
 638        return Ok(new ApplicationInformationResponse(
 639            ApplicationName: "ProjectTemplate.Web",
 640            ApiVersion: FormatApiVersion(requestedVersion),
 641            Message: "API versioning foundation active."));
 42    }
 43
 44    private static string FormatApiVersion(ApiVersion version)
 45    {
 646        int minorVersion = version.MinorVersion ?? 0;
 47
 648        return string.Create(
 649            System.Globalization.CultureInfo.InvariantCulture,
 650            $"{version.MajorVersion}.{minorVersion}");
 51    }
 52
 53    private void AppendDeprecationHeaders()
 54    {
 255        Response.Headers[_deprecationHeaderName] = "true";
 256        Response.Headers[_sunsetHeaderName] = _deprecatedVersionSunsetDate.ToString("R", System.Globalization.CultureInf
 257        Response.Headers.Link = "</api/v1/application-information>; rel=\"successor-version\"";
 258    }
 59}
 60
 61/// <summary>
 62/// Represents sample application API information.
 63/// </summary>
 64/// <param name="ApplicationName">The application name.</param>
 65/// <param name="ApiVersion">The resolved API version.</param>
 66/// <param name="Message">A short status message.</param>
 67public sealed record ApplicationInformationResponse(
 68    string ApplicationName,
 69    string ApiVersion,
 70    string Message);