.NET Core Web API 在部署到 Azure 后无法正常工作

Posted

技术标签:

【中文标题】.NET Core Web API 在部署到 Azure 后无法正常工作【英文标题】:.NET Core Web API not working after being deployed to Azure 【发布时间】:2019-01-04 14:09:58 【问题描述】:

我有一个简单的 .NET Core Web API 应用程序,它是由 Visual Studio 在创建新项目时创建的。我想通过 FTP 将它部署到 Azure 应用服务,作为 Team Foundation Server (TFS) 2017 构建作业的一部分,这是成功的:

但是,当尝试GET 请求时,例如以下 URL:

http://somerandomname.azurewebsites.net/api/values

我得到的只是一个带有文本的 404:

您要查找的资源已被删除、更改名称或暂时不可用。

来自 Kudu,我收到以下错误:

我错过了什么?

【问题讨论】:

您必须等待几分钟才能完成部署。你在使用 Docker 吗? 好吧,如果你要在 IIS 中托管,你需要一个 web.config :) @AlvaroCantador - 还没有 docker,只是一个普通的 IIS(我认为) @juunas 我怀疑这一点。我需要在里面放什么? @tomab 看看docs.microsoft.com/en-us/aspnet/core/host-and-deploy/iis/… 【参考方案1】:

我在 .net 5 API 项目中遇到了同样的问题。它在本地机器上运行良好,但在发布到 Azure WebApp 后会出现错误

找不到此 ****.azurewebsites.net 页面

在我的情况下,Startup.cs 中缺少以下几行

app.UseEndpoints(endpoints =>
            
                endpoints.MapControllers();
            
        );

在 startup.cs 的配置部分添加这些行修复了问题。

【讨论】:

【参考方案2】:

我在使用 Azure DevOps 时遇到了类似的问题。

我决定尝试通过右键单击发布到不同的应用服务,这样我就可以看到我应该有什么 web.config。

右键单击部署的应用程序确实显示 /api/values 而 devops 应用程序没有。

web.configs 中唯一的区别是 stdoutLogFile 的位置

使用右键部署

stdoutLogFile="\\?\%home%\LogFiles\stdout"  

使用开发人员

stdoutLogFile=".\logs\stdout

但是右键部署包含了我所有的第 3 方 dll,所以我认为我的 devops 管道 nuget 设置需要更正。

我是asking about that here

【讨论】:

【参考方案3】:

所以需要一个 web.config。当添加新项目时,VS 2017 用一些默认值填充它并不好。使用 VS 2017 web api 默认项目,我使用右键菜单发布了它。那工作得天衣无缝。我从 Azure Web 服务中获取了 web.config 并将其集成到我自己的项目中,只更改了 dll 名称。现在,当构建作业代表 TFS 运行时,它会在通过 FTP 上传到 Azure 应用服务的文件中包含 web.config。

这是我结束的 web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
  <remove name="aspNetCore"/>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
  <aspNetCore processPath="dotnet" arguments=".\Somerandomname.WebApi.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" />
</system.webServer>

【讨论】:

以上是关于.NET Core Web API 在部署到 Azure 后无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Elastic Beanstalk 上使用 Docker 部署 .NET Core Web API

将 asp.net core web api 部署到 IIS 7.5 时出现 500 错误

asp.net core 2 Web API 超时问题

.NET Core Web Api 错误 -4090 EADDRNOTAVAIL 地址在 Azure 上不可用

ASP.NET Core Web API HTTP POST 在 Azure 中返回 404

Asp.Net Core Web API 应用程序:如何更改监听地址?