我們正試圖排除我們的生產代碼的某些控制器(我們暴露了我們的綜合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();
}
}
}
所以基本上我們只是與非生產性屬性裝點「得罪」控制器,我從ApiExplorerSettingsAttribute繼承排除從生成的文檔控制器。
一個問題可能是使用環境變量,也許以某種方式從IHostingEnvironment獲取它?
或者你會建議一個完全不同的選擇(用於排除控制器)?
您可以將環境變量放在web.config中,然後轉換每個環境的配置。我以前做過這個,效果很好 –
我認爲env變量部分很好,除非你可以使用[config]來抽象這個(https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration#using-options-and-configuration-objects),唯一值得關注的是你將在路由表中擁有所有這些非prod路由。它也感覺有點冒險,如果做錯了事情可能會泄漏到產品中,則存在風險。你可以看看構建時間過程來做同樣的事情。 – Matt
@Matt我的初始設計涉及到構建過程,只包括需要什麼 – cstruter