ASP.NET Core ApiVersioning 更改中间件层次结构

标签 asp.net asp.net-core .net-core asp.net-core-webapi api-versioning

我对中间件层次结构有疑问。我使用一个 Controller /操作创建了非常简单的 Web api

[Route("api/v1/values")]
  public class ValuesController : Controller
  {
    // GET api/v1/values/5
    [HttpGet("{id}")]
    public async Task<IActionResult> Get(string id)
    {
      return await Task.Run<IActionResult>(() =>
      {
        if (id == "nf")
        {
          return NotFound();
        }

        return Ok($"value: {id}");
      });
    }
  }

我将路由配置为如果匹配则使用 Mvc,如果不匹配则将默认值写入响应。

app.UseMvc();

app.Use(async (context, next) =>
{
  await context.Response.WriteAsync("Default");
});

这非常有效,您可以在下面看到示例请求/响应:

/api/v1/values/1 -> 200, Body: "value: 1"
/api/v1/values/nf -> 404
/api/v1/values -> "Default"

太棒了,但后来我添加了 ApiVersioning,所以 Controller 看起来像这样:

[ApiVersion("1")]
[Route("api/v{version:apiVersion}/values")]
public class ValuesController : Controller

我添加到启动:services.AddApiVersioning();。它完全破坏了路由,现在对于每个请求,当我删除最后一个应用程序时,我都会得到“默认”响应。使用,路由对于值 Controller 工作正常,但我没有默认中间件。您知道我如何获得与以前相同的响应,但使用 ApiVersioning 吗?

最佳答案

试试这个。

[ApiVersion("1.0")]
[Route("api/v{version:apiVersion}/foo")]
public class FooController {}

在启动类中

 public void ConfigureServices(IServiceCollection services)
        {
            services.AddApiVersioning(options =>
            {
                options.ReportApiVersions = true;
                options.AssumeDefaultVersionWhenUnspecified = true;
                options.DefaultApiVersion = new ApiVersion(1, 0);
            });
        }

我已经尝试过了,它对我有用。

关于ASP.NET Core ApiVersioning 更改中间件层次结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46151271/

相关文章:

c# - 如何在 .NET Core 2.1 中使用 String.Create 的示例

c# - 无法在 ssl 模式下使用端口 25 发送电子邮件?

c# - .Net 代码 asp.net Lambda : duplicate AWS cloudwatch logs, 一个未格式化

asp.net-core - 为什么 AspNetCore DataProtection Azure 存储使用内部 key

c# - Entity Framework Core linq 查询返回 InvalidCastException

c# - EF Core - 添加唯一索引

entity-framework - 为什么我的 EF Core 迁移会忽略模型的 OnDelete 设置?

javascript - 将 Base64 图像发布到 Mvc Controller

c# - 为什么自定义 html 助手无法正确呈现标签

javascript - 如何使用javascript函数通过ID访问asp控件?