我正在使用 MVC3,我需要将同一个网站部署到多个位置,但禁用某些控制器。要禁用的控制器共享相同的基本控制器类。
我认为我应该能够使用不同的构建配置来做到这一点,每个配置都有一组不同的编译器开关来控制启用或禁用哪些控制器集。
我无法确定实现这一目标的最佳方法。任何人都可以帮忙吗?也许有什么OnActionExecuting
?
谢谢
我正在使用 MVC3,我需要将同一个网站部署到多个位置,但禁用某些控制器。要禁用的控制器共享相同的基本控制器类。
我认为我应该能够使用不同的构建配置来做到这一点,每个配置都有一组不同的编译器开关来控制启用或禁用哪些控制器集。
我无法确定实现这一目标的最佳方法。任何人都可以帮忙吗?也许有什么OnActionExecuting
?
谢谢
您是在谈论取决于活动配置的条件编译吗?
转到项目属性 -> 构建 -> 条件编译符号并添加您的字符串常量
然后你可以写这样的代码:
#if TESTCFGACTIVE
Console.WriteLine("Test CFG Constant");
#else
Console.WriteLine("Normal");
#endif
Console.ReadLine();
显然,在发布模式和调试模式下运行它会产生不同的输出。
不完全确定这是否是您所追求的,但我很少使用它来禁用和启用不同环境中的调试/日志记录。
对于像你所说的那样,它更多的是关于应用程序的行为,我会使用一个简单的配置设置来打开或关闭控制器。然后,您可以使用构建脚本将相关配置文件部署到相关输出目录。
也许通过创建自定义路由约束并使用ConditionalAttribute?
这些方面的东西:
public class DisabledControllersRouteConstraint : IRouteConstraint
{
IList<string> DisabledControllers = new List<string>();
public DisabledControllersRouteConstraint()
{
DisableConstrollersDebug();
DisableConstrollersRelease();
DisableConstrollersProduction();
}
[Conditional("RELEASE")]
private void DisableConstrollersRelease()
{
DisabledControllers.Add("ControllerDisabledForRelease");
}
[Conditional("PROD")]
private void DisableConstrollersProduction()
{
DisabledControllers.Add("ControllerDisabledForProduction");
}
[Conditional("DEBUG")]
private void DisableConstrollersDebug()
{
DisabledControllers.Add("ControllerDisabledForDebug");
}
public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection)
{
var controller = values["controller"];
return !DisabledControllers.Contains(controller);
}
}