【问题标题】:Disable Controller API Endpoint For Production为生产禁用控制器 API 端点
【发布时间】:2019-07-26 02:17:00
【问题描述】:

有什么推荐的方法可以让一个 restful 端点 api 甚至一个控制器在开发中公开,但在发布到其他环境时它不可用?

【问题讨论】:

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


    【解决方案1】:

    没有内置的方法可以做到这一点。您必须执行类似将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()
    

    【讨论】:

    • 我们不能在 rest 控制器上使用 @Profile 属性并启用它进行开发吗?
    • 我不确定你在说什么。没有Profile 属性。
    • 对不起,我的意思是类级别的@Profile 注释。
    猜你喜欢
    • 1970-01-01
    • 2019-04-22
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多