在发布版本中隐藏一个 api 端点

Hide an api endpoint in release build

我正在从事 Asp.net 网络 api 项目。我最近使用 config.Services.GetApiExplorer();

创建了一个文档终点

在生产环境中隐藏此端点并使其仍可供我团队中的所有其他开发人员使用的最佳方法是什么。

我能想到的一种方法是使用

注册一条路线
#if debug

routes.MapRoute(
"documentation",
"documentation/help", 
new { controller = "apiexplorer", action
= "Index" }
);

#endif

有两个属性可以隐藏 API 端点:

[ApiExplorerSettings(IgnoreApi = true)]
[NonAction]
public async Task<void> PrivateAPI()
{
...
}

但对于您的情况,我可能会创建一个新属性来检查环境并将该属性应用于您的控制器方法。 注入 'IHostingEnvironment' class,然后使用 .IsDevelopment() 方法。

我假设即使在生产环境中,您的开发人员仍然需要访问该端点(为了健全性检查,......与开发和暂存环境相同)。 如果是这种情况,请创建一个新策略并将您的开发人员(或您希望向其公开端点的任何其他人)置于该策略之下。

[Authorize(Policy = "JustDevelopersPolicy")]
public async Task<void> PrivateAPI()
{
...
}

仅供参考,它可能会通过调用该端点来更改响应,因此,如果未经授权的人调用它,他们将获得 401 而不是 404