【问题标题】:Application deployed in azure using wrong web.config使用错误的 web.config 在 azure 中部署的应用程序
【发布时间】:2016-10-08 02:23:51
【问题描述】:

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

我的虚拟目录映射看起来像

  1. 虚拟 ----- 物理 --- IsApplication
  2. / ----- site\wwwroot\ ------ IsApplicaiton (yes) [mvc 的路径 项目] 应用
  3. /api ---- site\services\ ------- IsApplication (no)
  4. /api/code ------ site\services\code\ ------- IsApplication (yes) [WebAPI 项目的路径]

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

【问题讨论】:

  • 如果您在与 MVC 相同的站点/应用程序池中运行 Web api,那么 App_Start() 方法中需要一个优先顺序。但听起来你没有这样做。能否包含异常详细信息?
  • 我不知道 Azure 中的 apppools 以及它是如何工作的。但我想做的是在一个站点下托管几个应用程序。 MVC 应该是 WebAPI 应用程序的客户端。据我了解 web.config 继承它应该从父文件夹而不是父虚拟目录继承设置。

标签: c# asp.net-mvc azure asp.net-web-api web-config


【解决方案1】:

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

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

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

【讨论】:

  • 谢谢各位。我确信这是通过物理结构而不是虚拟结构进行的继承。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-04-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-11
  • 2017-02-25
  • 2018-09-25
相关资源
最近更新 更多