我们正在我们的应用程序中开发一个新的API版本,所以我们基本上有一个
namespace Bla.V1.Controllers
[ApiController]
[ApiVersion("1")]
public partial class SampleController : ControllerBase {}和一个
namespace Bla.V2.Controllers
[ApiController]
[ApiVersion("2")]
public partial class SampleController : ControllerBase {}我们还配置了API版本控制(AddApiVersioning),以便当有人试图访问api/v3/sample/action时,他将得到一个由API版本控制中间件提供的不受支持的错误响应版本。
现在,V2版本正在开发中,我们希望只在开发阶段提供它。控制器代码将被部署到生产中,但是我们希望禁用生产中的V2版本。
我们会使用一个特性标志来完成这个任务,但是应该做些什么来隐藏V2控制器呢?我在想:
的访问
我目前正在考虑编写一个授权属性,该属性将根据功能标志状态拒绝访问,并将其应用于V2控制器。有没有更好、更优雅的方法来做到这一点?
发布于 2022-08-04 08:05:57
万一有人对此感兴趣。我们的控制器代码是从Swagger定义自动生成的。因此,我将以下代码添加到生成模板中,在每个控制器方法中调用该模板:
if (!this.IsV2Enabled())
{
var protocol = this.Request.IsHttps ? "https" : "http";
return this.BadRequest(new
{
error = new {
code = "UnsupportedApiVersion",
message = $"The HTTP resource that matches the request URI '{protocol}://{this.Request.Host}{this.Request.Path}' does not support the API version '1'."
}
});
}https://stackoverflow.com/questions/73223346
复制相似问题