在 ASP.NET Core Minimal API 中按标头进行版本控制

问题描述 投票:0回答:1

我有一个 ASP.NET Core Minimal API。我想使用请求标头

X-Api-Version
对端点进行版本控制。根据版本我想做不同的事情。

类似这样的:

app.MapPost("/save", (
    [FromHeader(Name = "X-Api-Version")] SaveVersion version,  // how to constraint this to v1?
    [FromBody] SaveRequestV1 request
    ) => "Do something");

app.MapPost("/save", (     // this is considered duplicate route
    [FromHeader(Name = "X-Api-Version")] SaveVersion version,
    [FromBody] SaveRequestV2 request
    ) => "Do another thing");

public enum SaveVersion
{
    v1 = 1,
    v2
};

public class SaveRequestV1
{
    public string Name { get; set; }
    public bool IsMember { get; set; }
}

public class SaveRequestV2
{
    public string Name { get; set; }
    public int MemberStatus { get; set; }
}

是否可以根据请求标头有不同的路由处理程序?

我希望我能做到

[FromHeader(Name = "X-Api-Version:regex(^1$)")]

类似于 url 中的路由约束,但无法识别。

Swagger 可以通过请求标头理解此版本控制吗?

asp.net-core minimal-apis
1个回答
0
投票

虽然您可以使用 ASP.NET API Versioning 包来处理版本控制要求,但 Swagger 不会喜欢您有两个具有相同方法/路径的端点。

操作的冲突方法/路径组合“POST 保存” - HTTP:POST 索引,HTTP:POST 索引。 Swagger/OpenAPI 3.0 的操作需要独特的方法/路径组合

这不会阻止端点工作,但会阻止 Swagger 加载并显示

Failed to load API definition - 500
错误。通过配置 Swagger 选项可以忽略冲突,但只有一个端点可见。

如果您在 URL 中提供版本作为路径的一部分或查询字符串参数,则可以避免冲突,这也是 Microsoft 推荐的方法。

© www.soinside.com 2019 - 2024. All rights reserved.