使用错误 web.config 在 azure 中部署的应用程序
Application deployed in azure using wrong web.config
我已经配置了一个 azure 网站 (MVC),并且一切正常,直到我尝试将 WebAPI 项目添加到部署到 azure 的解决方案中。
My virtual directory mapping looks like
- virtual ----- physical --- IsApplication
- / ----- site\wwwroot\ ------ IsApplicaiton (yes) [Path for mvc
project] Application
- /api ---- site\services\ ------- IsApplication (no)
- /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
我已经配置了一个 azure 网站 (MVC),并且一切正常,直到我尝试将 WebAPI 项目添加到部署到 azure 的解决方案中。
My virtual directory mapping looks like
- virtual ----- physical --- IsApplication
- / ----- site\wwwroot\ ------ IsApplicaiton (yes) [Path for mvc project] Application
- /api ---- site\services\ ------- IsApplication (no)
- /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