我的 Entity Framework Core API 在本地运行良好,但在生产环境中出现 405 错误

My Entity Framework Core API works fine locally, but fails with a 405 error in production

我有一个使用 Entity Framework.

的 .NetCore 3.1 API 项目

当我从 Visual Studio 本地 运行 它时,它工作得很好。

但是,在发布到生产 IIS 8.5 服务器后,当我尝试点击在生产服务器上使用 PUT 的 API 时出现以下错误。

xhr.js:178 PUT https://nationalparks.xyz.gov/api/plants/91 405 (Method Not Allowed)

我的控制器是这样开始的:

    [HttpPut("{id}")]
    public async Task<IActionResult> PutPlant(long id, [FromBody] Plant plant)
    {
      ...
    }

客户端看起来像这样:

    await axios({
        method: "PUT",
        url: "api/plants/" + plant.id,
        data: JSON.stringify(plant),
        headers: { 'Content-Type': 'application/json; charset=utf-8' }
    });

老实说,我很困惑...我不确定为什么要这样做。

我看到一些帖子说要修改 web.config,但我的应用程序使用 appsettings.json,而不是 web.config。

有什么想法吗?

谢谢!

在 IIS 下 运行ning 时,dotnet 核心应用程序确实使用 web.config。您会注意到 publish 命令生成了一个 web.config 文件,该文件告诉 IIS 将哪个 DLL 运行 用于您的应用程序。

我想我前段时间也遇到过同样的问题。我通过向 web.config 添加行来删除 WebDAV 模块来修复它。有关详细信息,请参阅此答案:

问题背后的原因是 WebDAV 模块拦截了请求。要解决此问题,您可以按照以下解决方法进行操作。

1) 从您的系统中删除 WebDAV:

打开控制面板->“打开或关闭 Windows 功能”->取消勾选 WebDAV 发布复选框。

2) 在您的 web.config 文件中添加以下代码:

<system.webServer>    
  <modules>        
    <remove name="WebDAVModule" />    
  </modules>    
  <handlers>        
    <remove name="WebDAV" />    
  </handlers>
</system.webServer>

请记住,完成这些更改后,您就可以在 iis 中使用 WebDAV 模块了。