一些笔测试人员测试了ASP.NET MVC4网站,他们发现我的URL:/%20 /例如显示“原始”错误。 https://example.com/%20/
Server Error in '/' Application.
Configuration Error
Description: An error occurred during the processing of a configuration file required to service this request. Please review the specific error details below and modify your configuration file appropriately.
Parser Error Message: The configSource file 'Web_ConnectionStrings.config' is also used in a parent, this is not allowed.
Source Error:
Line 17: <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
Line 18: <!-- these settings can be found in external files - this prevents application restart when they are changed -->
Line 19: <connectionStrings configSource="Web_ConnectionStrings.config" />
Line 20: <appSettings configSource="Web_AppSettings.config" />
Line 21: <!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
尽管应该,但这不是正常的404错误,我已经捕获了这些错误并显示了自定义页面。我也抓住了500,并很好地显示了它们。此错误发生在 global.asax.cs 中的 Application_Error()之前,因此没有被捕获。
这似乎是由IIS或应用程序引起的斜杠-空格-斜杠引起的,并且它试图多次加载web.config的包含文件。
如果我以常规方式包括这些部分(不是外部文件,而是web.config中的常规XML部分),那么一切都会按预期进行,并显示自定义404页面。
如果您删除了%20并只做了两个斜杠,则一切正常。似乎必须是这个特定的URL。
我还看过其他有关IIS配置的文章,其中带有默认站点或指向相同文件位置的虚拟路径。但是我认为这不适用,因为我已停止了默认站点,并且在其他任何URL上都看不到任何问题-该站点似乎运行正常。
有人知道IIS试图使用/%20 / URL吗?还是如何更优雅地处理呢?
我喜欢拆分这些配置部分,以使更改不会回收应用程序池,但是如果这样做有问题(为什么允许外部文件?),我想我会将所有设置都放入web.config本身。