我敢肯定只有我一個人,但在使用了多種來源、方法和多次拍攝之后,我似乎連最簡單的例子都aspnet-api-versioning無法作業。我不斷收到不同版本的端點的 AmbiguousMatchExceptions。我究竟做錯了什么?為了使它作業,我應該改變什么?
using Asp.Versioning;
using Microsoft.AspNetCore.Mvc;
internal class Program
{
private static void Main(string[] args)
{
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services
.AddApiVersioning()
.AddMvc();
var app = builder.Build();
app.MapControllers();
app.Run();
}
}
[ApiVersion("1.0"), Route("v{version:apiVersion}/hello")]
public class HelloV1Controller : ControllerBase
{
[HttpGet]
public string Get() => "v1";
}
[ApiVersion("2.0"), Route("v{version:apiVersion}/hello")]
public class HelloV2Controller : ControllerBase
{
[HttpGet]
public string Get() => "v2";
}
uj5u.com熱心網友回復:
發生這種情況是因為設定不完整。它應該是:
builder.Services.AddApiVersioning().AddMvc();
名稱有意相似,但與某些人的看法相反,這并沒有添加完整的 MVC 堆疊。API 版本控制6.0添加了一個新的IApiVersioningBuilder,以便所有相關的擴展可以組合在一起。中支持最少的 API6.0,這意味著不再依賴于 MVC Core 的任何部分。這就是AddApiVersioning()現在所做的。要添加 MVC Core 以像以前版本中那樣支持控制器,您必須呼叫AddMvc(). 這使您可以最靈活地選擇要如何對 API 進行版本控制。您甚至可以混合搭配Minimal API和控制器。
為了快速參考,這里是配置選項的策略:
services.AddApiVersioning() // Core API Versioning services with support for Minimal APIs
.AddMvc() // API version-aware extensions for MVC Core
.AddApiExplorer() // API version-aware API Explorer extensions
.AddOData() // API versioning extensions for OData
.AddODataApiExplorer(); // API version-aware API Explorer extensions for OData
顯然,如果您不使用 API Explorer 或 OData 包,則這些擴展不適用。
此外,每個控制器都必須進行修飾,[ApiController]以便 API 版本控制可以消除 API 控制器和 UI 控制器之間的歧義,否則它們具有相同的基本型別。您還可以使用[assembly: ApiController]使專案中的所有控制器成為 API 控制器。
AddEndpointsApiExplorer()是完全無關的。如果您沒有使用Minimal APIs,那么它是不必要的。如果您要添加 OpenAPI 來記錄您的 API,那么您需要添加 API Explorer 擴展。
討論和發行說明中有很多注釋,但檔案不是最新的。有一個問題跟蹤,更新即將到來。最好的參考起點是查看最新示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/526716.html
