ASP.Net Core MVC 需要 web.config 中的 <environmentVariables> 才能工作

Posted

技术标签:

【中文标题】ASP.Net Core MVC 需要 web.config 中的 <environmentVariables> 才能工作【英文标题】:ASP.Net Core MVC needs <environmentVariables> in web.config to work 【发布时间】:2020-06-21 14:44:55 【问题描述】:

我正在将我的 ASP.Net Core 3.1 MVC 项目发布到 IIS。该项目包括一个 web api 控制器以及 mvc 控制器。它会生成一个 web.config 文件,如下所示。发布后,该应用程序会显示该页面,但除非我添加指向 Development 的 ,否则 web api 不起作用。如果我把 Production 改为,它不起作用。

Web.config 生成

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
    </system.webServer>
  </location>
</configuration>

Web.config 修改:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <location path="." inheritInChildApplications="false">
    <system.webServer>
      <handlers>
        <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
      </handlers>
      <aspNetCore processPath=".\MyApp.exe" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess">
        <environmentVariables>
            <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
        </environmentVariables>
      </aspNetCore>   
    </system.webServer>
  </location>
</configuration>

web.config 的修改部分

<environmentVariables>
    <environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariables>

【问题讨论】:

能否请您告诉我有关 web api 不起作用的详细错误消息?它返回 404 错误还是 500 错误?另外,我建议你可以检查startup.cs代码或路由代码,确保你没有添加类似thisif (env.IsDevelopment())这样的代码来禁用某些web api设置。 这是我在浏览器控制台中看到的错误。加载资源失败:服务器响应状态为 500(内部服务器错误)mysite/api/myapi。就像我说的,页面加载cshtml内容,只有api调用失败。 我检查了 startup.cs,没有特定于 env.IsDevelopment();除了这一行 app.UseDeveloperExceptionPage(); 我想我有类似的问题。我在 launchSettings.json 中使用 ASPNETCORE_ENVIRONMENT="Development" 并使用 web.config without environmentVariables 部分。当我在 IISExpress 中启动应用程序时,它以生产模式而不是开发模式启动。我认为它与最新的 VS 更新有关,因为不久前它的工作方式有所不同。谁能证实我的假设? 我想我找到了错误的原因:github.com/dotnet/websdk/issues/564#issuecomment-644714341 【参考方案1】:

将 Visual Studio 更新到刚刚发布的 v16.6.3(6 月 30 日)。它显然包含对此问题的修复。我刚刚遇到了类似的问题,发布在这里:

Why do environmentVariables from launchSettings.json profiles not load when aspNetCore web.config sections exist?

【讨论】:

以上是关于ASP.Net Core MVC 需要 web.config 中的 <environmentVariables> 才能工作的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 17. 基于Claim和Policy的授权 上

使用 FFMPEG 的 ASP.NET Core 5.0 MVC HLS 转码

ASP.NET Core MVC 中两种路由的简单配置

[MVC&Core]ASP.NET Core MVC 视图传值入门

在 IIS 上使用 .NET Core 运行 ASP.NET 5 (MVC 6)

ASP.NET Core 配置 MVC - ASP.NET Core 基础教程 - 简单教程,简单编程