Ich verwende die ASP-Versionierungsbibliothek, um einen ASP.NET Core-Web-API-Controller in einem Mikrodienst zu versionieren.
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]")]
In diesem Controller habe ich einige Aktionen definiert, z.B. eine, um die Version zu erhalten:
Code: Select all
[HttpGet("version")]
[Produces("text/plain")]
[ProducesResponseType(StatusCodes.Status200OK)]
public IActionResult GetVersion() => ...
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.
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%
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.
Code: Select all
services.AddApiVersioning(opt =>
{
opt.ApiVersionReader = new UrlSegmentApiVersionReader();
}).AddApiExplorer(opt =>
{
opt.GroupNameFormat = "'v'V";
});
Ich habe das hier unter „ASP.NET Core mit MVC (Core)“ bereitgestellte Beispiel befolgt.