gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 15:00:26 24 4
gpt4 key购买 nike

我对中间件层次结构有疑问。我使用一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com