禁用用于生产的Controller API端点

Ωme*_*Man 0 .net-core asp.net-core-webapi

建议使用哪种方法允许在开发中公开静态的api甚至控制器,但是在发布到其他环境后不可用?

Chr*_*att 5

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

if (!env.IsDevelopment())
{
    return NotFound();
}
Run Code Online (Sandbox Code Playgroud)

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

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)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

然后可以将其应用于相关的操作,例如:

[DevelopmentOnly]
public IActionResult Foo()
Run Code Online (Sandbox Code Playgroud)