【问题标题】:Getting a 404 after deploying to Azure部署到 Azure 后获取 404
【发布时间】:2019-11-12 13:16:51
【问题描述】:

我能够成功执行到 Azure 应用服务的 Web 部署,但随后找不到 Web 应用程序。

我部署了一个在本地运行良好的 ASP.NET Core 2.2 Web 应用程序。在门户网站上,没有任何问题显示出问题。当我通过例如调用它时,

https://xxxxxxxxx.azurewebsites.net/api/values 

我得到错误:

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

【问题讨论】:

标签: azure asp.net-core azure-web-app-service webdeploy


【解决方案1】:

API 项目的另一个问题是,他们的 UI(通常是他们的 Swagger UI)可能仅在开发过程中可用,但一旦部署到现场就不能使用。

要检查这一点,请在 Startup.cs 中查看任何基于env.IsDevelopment() 检查有条件地运行的代码。例如,.NET Core Web API 模板添加了以下代码:

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication6 v1"));
    }

如果您将该项目的 API URL 放在开发机器上的浏览器中,您将按预期看到 Swagger API。但是,如果您对该应用的已部署版本执行相同操作,您将得到 404,因为 env.IsDevelopment 不再正确。

还有一些其他的scenarios that can cause a 404 in this thread too

【讨论】:

  • 为什么他们在生产中隐藏这个,如果我想暴露 swagger.json 我该怎么办?
  • @Jimmy 将与 swagger 相关的两行从条件语句中移出应该使其全部公开可见。我想出于安全原因,默认情况下它不会显示 - 您不需要公开该信息,除非您正在编写您希望第三方开发人员使用的 API。
  • 对,但在本教程中发布 api 他们需要 OpenAPI 规范的 url。我认为必须有一些配置才能在没有完整 SwaggerUI 的情况下公开它,但我找不到它 - docs.microsoft.com/en-us/azure/api-management/…
  • @Jimmy 说得好,但恐怕我不知道答案 - 我建议创建一个新问题,这似乎是 SO 上的某个人会知道的事情!跨度>
【解决方案2】:

如果从 VS 部署成功,首先要测试的是端点以及它是否提供您需要的数据。

在我的例子中,我使用 .NetCore 3.0 和一个新的 WebApi 项目。部署并导航到基本 URL 后

https://xxxxxxxxx.azurewebsites.net

  1. 将端点 /values> 附加到您的基本 URL https://xxxxxxxxx.azurewebsites.net 以查看它是否会服务/响应您的请求。

https://xxxxxxxxx.azurewebsites.net/api/values

  1. 部署完成后,swagger/index.html 没有自动加载,我必须将其附加到 URL 才能提供服务。

https://xxxxxxxxx.azurewebsites.net/swagger/index.html

这样,请注意 tomRedox 的回答,他建议在 configure 方法中注释掉 if 语句

//if (env.IsDevelopment())
//{
    app.UseDeveloperExceptionPage();
    app.UseSwagger();
    app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "WebApplication6 v1"));
//}

我注意到,将其注释掉并不会像在本地主机中那样在部署时自动为 swaggerUI 提供服务。

【讨论】:

  • 与下面的回答类似,没有意识到 Swagger 页面仅在开发过程中存在。
【解决方案3】:

这是因为部署或默认的 ASP.NET Core Web API 模板在网站的根目录中不包含默认文档。例如 index.htm、defualt.aspx、default.htm 是默认文件,如果访问 URL 时没有提供特定文件,IIS 会下发。

您可以将这些文件之一放入网站的根目录,在 wwwroot 目录中,或通过附加 直接请求 ASP.NET Core Web API >/api/<methodname> 或默认添加 api/values 到 ASP.NET Core Web API 的末尾,然后您应该会得到预期的 JSON 或 XML 响应。

希望对你有帮助。

【讨论】:

    【解决方案4】:

    事实证明,Visual Studio 2019 并没有创建 web.config 文件。这不会打扰我们的本地 IIS 服务器。但是 Azure 应用服务需要一个,但如果没有,它不会提供特定错误。

    我从他们读到的“.NET Core Web API not working after being deployed to Azure”中得到了提示。

    我见过的演练或教程都没有提到它。

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-21
      相关资源
      最近更新 更多