【问题标题】:ASP.NET Core Web API HTTP POST returns 404 in AzureASP.NET Core Web API HTTP POST 在 Azure 中返回 404
【发布时间】:2017-12-10 18:44:10
【问题描述】:

我有这个(简化的)ASP.NET Core Web API 控制器。 GET 和 POST 操作在我自己的机器上运行良好。但是,部署到 Azure 只有 GET 操作才能正常工作。 POST 操作导致 404。有什么想法吗?

namespace Foo
{
  using System;
  using System.Collections.Generic;
  using Microsoft.AspNetCore.Mvc;

  [RequireHttps]
  [Produces("application/json")]
  [Area("Foo")]
  [Route("[area]/Api/[controller]")]
  public class BarController : Controller
  {
    [HttpGet]
    public IEnumerable<string> Get()
    {
      return new[] {"Hello", "World!"};
    }

    [HttpPost]
    public void Post([FromBody] InputModel model)
    {
    }

    public class InputModel
    {
      public int Foo { get; set; }
    }
  }
}

它是一个面向完整 .NET 框架的 ASP.NET Core MVC 应用程序。它被部署为 Azure Web 应用程序。我已经使用 Postman 在本地计算机和 Azure 中测试了这两个操作。

【问题讨论】:

  • 检查你的网络配置,看看是否允许 POST 请求
  • 我发现如果我将内容类型更改为几乎除 application/json 之外的任何其他内容(给出 404),我会得到 415“不支持的媒体类型”。但这仍然不能解决我的问题。
  • 您是否发布了 ModelBinder 可以绑定到 InputModel 类的内容?
  • 是的,@RickvandenBosch。我在查询之间复制了完全相同的文字输入数据。
  • 我刚刚在一个干净的 asp.net core 2.0 MVC API 项目中创建了这个控制器。然后我通过 Visual Studio 将它部署到一个全新的应用服务。一切正常。不知道你身边发生了什么。我只能想象它与“它是一个针对完整 .NET 框架的 ASP.NET Core MVC 应用程序”有关。尝试在 .net 核心网络应用程序中独立运行您的控制器,如果这可行,那么您可能更接近一步。那可能只是一些路由错误。我从来没有将 .net core 2.0 项目集成到 .net 框架应用程序中,所以很遗憾,我对此一无所知。

标签: azure post asp.net-core-webapi


【解决方案1】:

似乎在某些情况下,当控制器发生错误时,ASP.NET 核心返回 404 而不是更合适的 500。查看这篇文章:

ASP.NET Core 2.0 site POST request resulting in 404 on Azure

在答案中,它是由错误的数据库连接字符串引起的(当您将应用程序发布到另一个环境时可能会出现这种情况),但也可能是其他原因。

不确定为什么它不抛出正常错误,也许它会尝试重定向到自定义错误页面或类似的东西。

要检查此建议,请尝试从 POST 控制器中删除所有内容以隔离问题。如果它不会返回 404,则意味着控制器中的某些内容抛出了异常。

【讨论】:

  • 谢谢。已经有一段时间了,但是,是的,据我所知,您的回答与我所经历的完全吻合:-)
猜你喜欢
  • 1970-01-01
  • 2014-10-18
  • 1970-01-01
  • 2020-12-23
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 2016-10-14
  • 2017-12-31
相关资源
最近更新 更多