禁用用于生产的Controller API端点

时间:2019-03-04 17:49:24

标签: .net-core asp.net-core-webapi

什么是建议的方法,以允许在开发中公开宁静的终结点api甚至控制器,但是在发布到其他环境中后不可用?

1 个答案:

答案 0 :(得分:3)

没有内置方法可以做到这一点。您必须执行类似的操作,将IHostingEnvironment注入到控制器中,然后在操作中进行如下检查:

if (!env.IsDevelopment())
{
    return NotFound();
}

这将使外观路由实际上不在开发环境之外。如果您要做的足够多,那么创建可以应用的自定义资源过滤器实际上可能会更好:

public class DevelopmentOnlyAttribute : Attribute, IResourceFilter
{
    public void OnResourceExecuting(ResourceExecutingContext context)
    {
        var env = context.HttpContext.RequestServices.GetService<IHostingEnvironment>();
        if (!env.IsDevelopment())
        {
            context.Result = new NotFoundResult();
        }
    }

    public void OnResourceExecuted(ResourceExecutedContext context)
    {
    }
}

然后您可以将其应用于以下相关操作:

[DevelopmentOnly]
public IActionResult Foo()