gpt4 book ai didi

ASP.NET API 版本控制

转载 作者:行者123 更新时间:2023-12-04 17:31:41 25 4
gpt4 key购买 nike

我是 ASP.NET 的新手,但我希望为即将开始的新 API 实现一些版本控制。

我什至不确定我正在寻找的东西是否可能,但我正在使用一个非常干净的版本方法,使用头变量。

理想情况下,我希望能够在代码结构中拥有一个版本文件夹,以及其中包含不同 API 版本的不同文件夹。
每个版本文件夹将包含核心 API 代码的完整副本,因此我知道永远不会有任何冲突等。我知道这会使代码膨胀,但值得保持它非常干净,并且只会超过 2-3激活的 API 版本。

我在 Internet 上找到了许多 header 示例,但它们都要求类位于不同的 namespace 中,如果我正在做代码的完整副本,那么每次复制时都必须重命名所有类是不切实际的。

我正在尝试做的事情可能吗?或者在处理多个类时是否有更清洁的解决方案?

最佳答案

答案有点晚,但对于仍想将版本控制应用于 ASP.NET Web API 堆栈的任何人,ASP.NET API Versioning已经成为一种非常普遍的实现方式。 Basic Sample将带您完成所有必要的步骤以开始使用。
API 版本控制支持开箱即用的查询字符串、 header 、媒体类型和 URL 段。如果您支持多个方法,您可以将方法组合在一起,您甚至可以创建自己的方法来提取 API 版本。版本控制的默认方法是查询字符串。尽管它很受欢迎并且来自@Win 的建议,我还是会不是 建议按 URL 段进行版本控制。它是 RESTful 最少的方法,因为它违反了统一接口(interface)约束并且有大量有问题的边缘情况。
首先添加 ASP.NET Web API Versioning NuGet 包。您想要如何版本化以及如何组织代码是非常主观的,但这里有一个非常简单的设置:

namespace Example
{
public class WebApiConfig
{
public static Configure(HttpConfiguration config)
{
// TODO: this is the minimum, but there are many options that can be configured
config.AddApiVersioning();

// TODO: remaining configuration
}
}

// this is one of many possible ways you might organize controllers
namespace Controllers
{
namespace V1
{
[ApiVersion("1.0")]
[RoutePrefix("values")]
public class ValuesController : ApiController
{
// GET /values?api-version=1.0
[Route]
public IHttpActionResult Get(ApiVersion version) =>
Ok(new []{$"v{version}-Value1", $"v{version}-Value2"});

// GET /values/{id}?api-version=1.0
[Route("{id}")]
public IHttpActionResult Get(int id, ApiVersion version) =>
Ok($"v{version}-{id}")
}
}

namespace V2
{
[ApiVersion("2.0")]
[RoutePrefix("values")]
public class ValuesController : ApiController
{
// GET /values?api-version=2.0
[Route]
public IHttpActionResult Get(ApiVersion version) =>
Ok(new []{$"v{version}-Value1", $"v{version}-Value2"});

// GET /values/{id}?api-version=2.0
[Route("{id}")]
public IHttpActionResult Get(int id, ApiVersion version) =>
Ok($"v{version}-{id}")
}
}
}
}

关于ASP.NET API 版本控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42371582/

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