我正在做一个 Asp.net 的 web 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"类,然后使用 .IsDevelopment(( 方法。
我假设您的开发人员即使在生产环境中仍然需要访问该端点(用于健全性检查,....与开发和暂存环境相同(。如果是这种情况,请创建一个新策略,并将开发人员(或要向其公开终结点的任何其他人(置于该策略下。
[Authorize(Policy = "JustDevelopersPolicy")]
public async Task<void> PrivateAPI()
{
...
}
仅供参考,它可能会通过调用该端点来更改响应,因此,如果未经授权的人调用它,他们会得到 401 而不是 404