ASP.NET Core-Versionierung, UrlSegmentApiVersionReader, Routen stimmen mit unsinnigen Versionsnummern überein
Posted: 30 Dec 2024, 18:54
Ich verwende die ASP-Versionierungsbibliothek, um einen ASP.NET Core-Web-API-Controller in einem Mikrodienst zu versionieren.
In diesem Controller habe ich einige Aktionen definiert, z.B. eine, um die Version zu erhalten:
Wenn ich einen Curl GET-Vorgang mit einer beliebigen Versionsnummer ausführe, erhalte ich die passende Route für die Version. In gewisser Weise ist dies nicht überraschend, da ich für die Aktion ein versionneutrales Matching verwende. Da die Controller-Route jedoch nur eine [ApiVersion] von 1 hat, habe ich erwartet, dass jede andere nicht deklarierte Versionsnummer zu „404 nicht gefunden“ führt.
Habe ich das falsch konfiguriert? Ist es möglich, nicht deklarierte Versionen abzulehnen statt abzugleichen? Mit UrlSegmentApiVersionReader ist der Standardwert (und wird standardmäßig angenommen) für meinen Code nicht angegeben, da alle Versionen explizit für URL-Versionen bereitgestellt wurden.
Ich habe das hier unter „ASP.NET Core mit MVC (Core)“ bereitgestellte Beispiel befolgt.
Code: Select all
using Asp.Versioning;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ModelBinding;
[ApiController]
[ApiVersion("1")]
[ControllerName("example")]
[Route("v{version:apiVersion}/[controller]")]
Code: Select all
[HttpGet("version")]
[Produces("text/plain")]
[ProducesResponseType(StatusCodes.Status200OK)]
public IActionResult GetVersion() => ...
Code: Select all
curl -X GET http://localhost:8127/v1/system/version
0.0.0.0%
curl -X GET http://localhost:8127/v1337/system/version
0.0.0.0%
Code: Select all
services.AddApiVersioning(opt =>
{
opt.ApiVersionReader = new UrlSegmentApiVersionReader();
}).AddApiExplorer(opt =>
{
opt.GroupNameFormat = "'v'V";
});