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

Posted

技术标签:

【中文标题】ASP.NET Core Web API HTTP POST 在 Azure 中返回 404【英文标题】:ASP.NET Core Web API HTTP POST returns 404 in Azure 【发布时间】: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 框架应用程序中,所以很遗憾,我对此一无所知。 【参考方案1】:

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

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

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

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

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

【讨论】:

谢谢。已经有一段时间了,但是,是的,据我所知,您的回答与我所经历的完全吻合:-)

以上是关于ASP.NET Core Web API HTTP POST 在 Azure 中返回 404的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET Core Web Api 自动帮助页面

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

从角度12将类对象发送到asp.net core web api http get方法

对 Web api 的 ASP.NET Core 应用程序 http 客户端请求

使用Http-Repl工具测试ASP.NET Core 2.2中的Web Api项目

如何通过 ASP.NET Core 3 中的中间 Web API 传递未更改的 HTTP 响应?