< Summary

Information
Class: ProjectTemplate.Web.Controllers.Api.ApplicationInformationResponse
Assembly: ProjectTemplate.Web
File(s): /home/runner/work/NetCoreApplicationTemplate/NetCoreApplicationTemplate/src/ProjectTemplate.Web/Controllers/Api/ApplicationInformationController.cs
Line coverage
100%
Covered lines: 4
Uncovered lines: 0
Coverable lines: 4
Total lines: 70
Line coverage: 100%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
.ctor(...)100%11100%
get_ApplicationName()100%11100%
get_ApiVersion()100%11100%
get_Message()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
 19    private static readonly DateTimeOffset _deprecatedVersionSunsetDate =
 20        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    {
 29        ApiVersion requestedVersion = HttpContext.Features
 30            .Get<IApiVersioningFeature>()
 31            ?.RequestedApiVersion ?? new ApiVersion(1, 0);
 32
 33        if (requestedVersion.MajorVersion == 0 && requestedVersion.MinorVersion == 9)
 34        {
 35            AppendDeprecationHeaders();
 36        }
 37
 38        return Ok(new ApplicationInformationResponse(
 39            ApplicationName: "ProjectTemplate.Web",
 40            ApiVersion: FormatApiVersion(requestedVersion),
 41            Message: "API versioning foundation active."));
 42    }
 43
 44    private static string FormatApiVersion(ApiVersion version)
 45    {
 46        int minorVersion = version.MinorVersion ?? 0;
 47
 48        return string.Create(
 49            System.Globalization.CultureInfo.InvariantCulture,
 50            $"{version.MajorVersion}.{minorVersion}");
 51    }
 52
 53    private void AppendDeprecationHeaders()
 54    {
 55        Response.Headers[_deprecationHeaderName] = "true";
 56        Response.Headers[_sunsetHeaderName] = _deprecatedVersionSunsetDate.ToString("R", System.Globalization.CultureInf
 57        Response.Headers.Link = "</api/v1/application-information>; rel=\"successor-version\"";
 58    }
 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>
 667public sealed record ApplicationInformationResponse(
 668    string ApplicationName,
 669    string ApiVersion,
 1270    string Message);