47

在编译期间我可以做一个检查

#if DEBUG
    Log("something");
#endif

但是,debug="false"在运行时检查是否在 Web.config 中设置的首选是什么?

4

3 回答 3

81

HttpContext.IsDebuggingEnabled

https://docs.microsoft.com/en-us/dotnet/api/system.web.httpcontext.isdebuggingenabled

于 2013-05-03T11:11:48.513 回答
56

在某些情况下,您可能需要HttpContext.Current.IsDebuggingEnabled(有点明显,但尽管如此)

于 2014-04-15T08:42:13.213 回答
2

还有另一种非编程的外部和经验方法来检查您是否不小心将debug=true属性留system.web/compilation在了 Asp.Net 网站上,即检测您是否在 web.config 中留下了此配置:

 <system.web>
    <compilation debug="true" targetFramework="xxx"/>

通过使用诸如Fiddler之类的工具,您可以截获对您网站的 GET 请求,然后对其进行更改,以便向该网站发出一个非标准DEBUGHTTP 动词以及一个额外的Command: stop-debugHeader。

  • 选择对您网站的 GET 请求并将其拖入 Composer
  • 切换到Raw选项卡(因为 DEBUG 不是标准的 HTTP 动词选项)
  • 编辑动词 from GETtoDEBUG
  • 添加一个额外的Command: stop-debug标头(在 Cookie 上方),但保留其余的标头和 Cookie
  • 执行DEBUG命令

如果网站返回 200 和 content OK,那么您就知道您已经离开调试了。403 - Forbidden如果debug关闭,该网站将返回。

提琴手截图

如果您的网站是在 CI/CD 构建管道上构建的,关闭调试的最佳方法是在您的Web.Release.config

<system.web>
  <compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>

(在生产环境中关闭调试是常见的安全审计要求)

于 2019-08-16T11:09:31.690 回答