.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 错误
.NET Core Web Api 错误 -4090 EADDRNOTAVAIL 地址在 Azure 上不可用