首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >继续使用aspnet-api版本控制获取AmbiguousMatchExceptions。

继续使用aspnet-api版本控制获取AmbiguousMatchExceptions。
EN

Stack Overflow用户
提问于 2022-11-03 18:10:01
回答 1查看 39关注 0票数 0

我肯定只有我一个人,但在使用了多个源、方法和许多实例之后,我似乎连最简单的aspnet-api-versioning示例都无法工作。我一直在为不同版本的端点获取AmbiguousMatchExceptions。我做错了什么?为了让它发挥作用,我应该改变什么?

代码语言:javascript
复制
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";
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-03 19:18:33

之所以发生这种情况,是因为设置不完整。它应该是:

代码语言:javascript
复制
builder.Services.AddApiVersioning().AddMvc();

这些名称有意相似,但与一些人的看法相反,这并没有增加完整的MVC堆栈。API版本控制6.0添加了一个新的IApiVersioningBuilder,这样所有相关的扩展都可以分组在一起。6.0支持最小的API,这意味着不再依赖于MVC核心的任何部分。这就是AddApiVersioning()现在所做的。要添加MVC以支持控制器,就像它在以前的版本中那样工作,您必须调用AddMvc()。这使您在选择如何修改API时具有最大的灵活性。您甚至可以混合和匹配最小的API和控制器。

为了快速参考,以下是配置选项的技巧:

代码语言:javascript
复制
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

显然,如果您没有使用apply或OData包,那么这些扩展就不适用了。

此外,每个控制器必须使用[ApiController]修饰,以便API版本控制可以消除API控制器和UI控制器之间的歧义,否则它们具有相同的基本类型。您还可以使用[assembly: ApiController]使项目中的所有控制器成为API控制器。

AddEndpointsApiExplorer()是完全不相关的。如果您没有使用最小的API,那么它就没有必要了。如果要添加OpenAPI来记录API,则需要添加API扩展。

讨论和发行说明中有很多注释,但是文档并不是最新的。有一个问题跟踪和更新即将到来。开始参考的最好地方是查看最近的例子

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74307741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档