使用错误 web.config 在 azure 中部署的应用程序

Application deployed in azure using wrong web.config

我已经配置了一个 azure 网站 (MVC),并且一切正常,直到我尝试将 WebAPI 项目添加到部署到 azure 的解决方案中。

My virtual directory mapping looks like

  1. virtual ----- physical --- IsApplication
  2. / ----- site\wwwroot\ ------ IsApplicaiton (yes) [Path for mvc project] Application
  3. /api ---- site\services\ ------- IsApplication (no)
  4. /api/code ------ site\services\code\ ------- IsApplication (yes) [Path for WebAPI project]

MVC 应用程序工作正常,但 WebAPI 应用程序(VS WebApplication -> WebAPI2 中的空白脚手架)不是。在修改 WebApi 的 web.config 以禁用自定义错误页面后,我发现问题出在 MVC 应用程序的 web.config 中包含的命名空间(当然 WebAPI 项目不拥有对它的引用,也不应该)。但是,为什么 WebAPI 在拥有自己的 MVC 应用程序时甚至还要为 web.config 坐在 MVC 应用程序中而烦恼呢?

Web.config 设置 "waterfall" 在应用程序中关闭。因此,如果您有一个应用程序托管在根“/”下,然后另一个应用程序托管在该根目录下(即“/api/code”),那么根 Web 应用程序的 web.config 中的所有设置都将添加到子应用程序 web.config 的设置。应用程序的物理位置与此行为无关。所有这些都是由虚拟目录结构驱动的。这就是您在 WebAPI 应用程序中看到与 MVC 应用程序的命名空间相关的错误的原因。

要解决此问题,您应该在 WebAPI 的 web.config 中使用 <remove name="..." /><clear /> 标记或 inheritInChildApplications 属性来删除从 MVC 应用程序传递下来的设置。可以在这个 SO 答案中找到如何执行此操作的示例:

有关 web.config 继承的更多信息,您也可以查看这篇 MSDN 文章:https://msdn.microsoft.com/en-us/library/ms178685.aspx