从生产代码中排除控制器

时间:2017-08-17 09:06:14

标签: asp.net-web-api asp.net-core integration-testing

我们正试图从我们的生产代码中排除某些控制器(我们公开某些端点以进行集成UI测试所需的API操作)

看一下以下代码片段,你能否通过这种方法看到任何根本错误?

[AttributeUsage(AttributeTargets.Class, AllowMultiple = true, Inherited = true)]
public class NonProductionAttribute : ApiExplorerSettingsAttribute, IActionFilter
{
    public NonProductionAttribute()
    {
        IgnoreApi = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == EnvironmentName.Production;   
    }

    public void OnActionExecuted(ActionExecutedContext context) { }

    public void OnActionExecuting(ActionExecutingContext context)
    {
        if (IgnoreApi)
        {
            context.Result = new NotFoundResult();
        }
    }
}

所以基本上我们只是使用NonProduction属性装饰“违规”控制器,我从ApiExplorerSettingsAttribute继承以从生成的文档中排除控制器。

问题可能是使用Environment变量,也许以某种方式从IHostingEnvironment获取它?

或者你会建议一个完全不同的替代方案(排除控制器)?

1 个答案:

答案 0 :(得分:1)

将所有“TestOnly”MVCC控制器和/或ApiControllers移动到它自己的区域。这有助于您更快地识别Test-Only-Code。

在您的AreaRegistration中,根据您所在的服务器/环境,不要注册任何路由。

如果您未指定路线,asp.net将为您返回404。

您甚至可以走得那么远,将所有测试代码移动到它自己的程序集中并包含它(如果需要),甚至不在prod上构建/部署它。 https://blog.longle.io/2012/03/29/building-a-composite-mvc3-application-with-pluggable-areas/