如何在发布时排除控制器?

Posted

技术标签:

【中文标题】如何在发布时排除控制器?【英文标题】:How should a controller be excluded on publish? 【发布时间】:2014-10-28 13:56:32 【问题描述】:

我有一个 .NET MVC 项目,其中包含一个 UnitTest 控制器,用于针对我的 javascript 代码运行 Jasmine 测试。但是,我不希望在发布网站时使用它。

我正在考虑几种方法来做到这一点,但我不确定哪种方法最好。

使用将要引入的授权属性来禁止访问它 实际上从可用路径集合中删除控制器

我将为此使用编译器指令 (#IF DEBUG) 以轻松分离。老实说,我认为移除控制器会是更好的选择,但我不确定它会去哪里。可能是 Global.cs 文件?

如果有任何建议,我将不胜感激。如果禁止访问控制器是最好的解决方案,那很好,而且我可以自己轻松实现。我只是认为必须有更好的方法。

【问题讨论】:

【参考方案1】:

你可以有条件地忽略路由:

#if !DEBUG
routes.IgnoreRoute("UnitTest/*pathInfo")
#endif

虽然这与按照您的建议有条件地删除控制器本身并没有太大区别。

【讨论】:

太棒了!这正是我一直在寻找的。谢谢! 我也非常高兴 +1 !【参考方案2】:

如果您使用 Web Deploy 进行发布,我认为在该步骤执行此操作将是一个挑战,因为它在发布时已经在程序集中。

但是,如果您希望在运行时检查它,如您所说。一种方法是在生产环境中拒绝对控制器的访问。可以使用 web.config 转换,或者使用授权属性装饰控制器。甚至以某种方式修改路由?

但您可以稍微修改项目文件。你可以include/exclude files depending on conditions。我只需将Condition=" '$(Configuration)' == 'Debug' " 添加到与项目文件中的控制器类匹配的<Compile /> 元素中。那么当项目内置发布时,控制器应该被排除在外。唯一的问题,它是一个隐藏的配置。如果控制器曾经从项目中删除并重新添加,则需要有人记得重新应用条件,否则它将最终发布。

【讨论】:

以上是关于如何在发布时排除控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Django 中进行故障排除?

如何从控制器 JSON 返回的实体字段中排除。 NestJS + Typeorm

UITextView textContainer排除路径在视图控制器的中间时不起作用

从 Spring-Boot 测试中排除 elasticsearchTemplate

在 UICollectionView 中使用 reloadData 时如何从重新加载中排除标头

Google Play控制台排除设备