在发布版本中隐藏api端点

时间:2019-04-26 01:03:00

标签: c# asp.net-web-api webapi2 asp.net-mvc-apiexplorer

我正在研究Asp.net Web api项目。我最近使用config.Services.GetApiExplorer();

为文档创建了一个终点

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

我想到的一种方法是使用

注册路线
#if debug

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

#endif

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

我假设即使在生产时,您的开发人员仍需要访问该端点(进行健全性检查,...与开发和登台环境相同)。 在这种情况下,请创建一个新策略,并将您的开发人员(或您要向其公开端点的任何其他人员)置于该策略下。

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

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