如何在发布时排除控制器?
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 />
元素中。那么当项目内置发布时,控制器应该被排除在外。唯一的问题,它是一个隐藏的配置。如果控制器曾经从项目中删除并重新添加,则需要有人记得重新应用条件,否则它将最终发布。
【讨论】:
以上是关于如何在发布时排除控制器?的主要内容,如果未能解决你的问题,请参考以下文章
如何从控制器 JSON 返回的实体字段中排除。 NestJS + Typeorm
UITextView textContainer排除路径在视图控制器的中间时不起作用
从 Spring-Boot 测试中排除 elasticsearchTemplate