AJAX 亚马逊 ASP.NET 核心应用的请求失败 Linux 2 vs 亚马逊 Linux 1
AJAX requests failing for ASP.NET Core app in Amazon Linux 2 vs Amazon Linux 1
我有一个 ASP.NET Core v.3.0 Web 应用程序托管在 Amazon AWS Elastic Beanstalk 中,使用 Docker。该应用程序在 Docker 运行 64 位亚马逊 Linux (v2.16.11) 中运行良好。当我更新到 Docker 运行 64 位亚马逊 Linux 2 (v3.4.12) 时,请求工作正常,但 AJAX 请求失败并显示状态代码错误 400“错误请求” .源代码、dockerfile 等没有其他变化。只有 Linux 版本从 Amazon Linux 更改为 Amazon Linux 2. 有没有人知道 Amazon [=] 之间有什么不同64=] 1 和 Amazon Linux 2 这可能是导致 AJAX 请求失败的原因?
更多信息:
- 我无法用官方 ASP.NET 核心 3.1 示例复制此错误。我还没有更新我的应用程序到 v3.1,我会尽快更新这个问题。
- 控制器内部的相关操作不会return Amazon 中的部分视图Linux 2. 控制器在returning 部分视图之前提供了一个日志,这不是在亚马逊触发 Linux 2.
- nginx access.log 文件显示负载均衡器的以下响应:
亚马逊 Linux 1:
{IP} - - [10/Apr/2022:07:36:01 +0000] "POST {url} HTTP/1.1" 200 3882 "{url2}" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" "{IP2}"
亚马逊 Linux 2:
{IP} - - [10/Apr/2022:07:00:14 +0000] "POST {url} HTTP/1.1" 400 0 "{url2}" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" "{IP2}"
调用是用jQuery 3.4.1:
var $form = $("#inputForm");
if ($form.length <= 0) return;
var data = $form.serialize();
$.ajax({
url: "...",
type: "POST",
data: data,
error: function (jqXHR, textStatus, errorThrown) {
alert("There was an error when loading the results (error type = " + errorThrown + ").");
},
success: function (result) {
$("#calculationTarget").html(result)
});
如果将项目从 ASP.NET Core 3.0 更新到 ASP.NET Core 3.1,则问题不再存在。
有一个非常简单的修复,正在更新到 ASP.NET Core 3.1
。
在此版本中,您遇到的问题已得到修复。
请参阅以下更新步骤。
如果您有 global.json
文件以特定 .NET Core SDK
版本为目标,请更新版本 属性。
{
"sdk": {
"version": "3.1.101"
}
}
将 TFM 更新为 netcoreapp3.1
,如下所述。
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
</PropertyGroup>
</Project>
您需要更新包引用。为此,请将每个 Microsoft.AspNetCore.*
(* 表示通配符)更新为 3.1.0
(或任何更高版本)。
如果您正在使用 Docker(我认为您是),那么您需要使用 ASP.NET Core 3.1
基础图像。请参阅下面的示例。
$ docker pull mcr.microsoft.com/dotnet/aspnet:3.1
有关额外的步骤和信息,请参阅 the official guide from migrating to ASP.NET Core 3.1
。
总而言之,将您当前的应用程序升级到 ASP.NET Core 3.1
应该可以解决您的问题。
我有一个 ASP.NET Core v.3.0 Web 应用程序托管在 Amazon AWS Elastic Beanstalk 中,使用 Docker。该应用程序在 Docker 运行 64 位亚马逊 Linux (v2.16.11) 中运行良好。当我更新到 Docker 运行 64 位亚马逊 Linux 2 (v3.4.12) 时,请求工作正常,但 AJAX 请求失败并显示状态代码错误 400“错误请求” .源代码、dockerfile 等没有其他变化。只有 Linux 版本从 Amazon Linux 更改为 Amazon Linux 2. 有没有人知道 Amazon [=] 之间有什么不同64=] 1 和 Amazon Linux 2 这可能是导致 AJAX 请求失败的原因?
更多信息:
- 我无法用官方 ASP.NET 核心 3.1 示例复制此错误。我还没有更新我的应用程序到 v3.1,我会尽快更新这个问题。
- 控制器内部的相关操作不会return Amazon 中的部分视图Linux 2. 控制器在returning 部分视图之前提供了一个日志,这不是在亚马逊触发 Linux 2.
- nginx access.log 文件显示负载均衡器的以下响应:
亚马逊 Linux 1: {IP} - - [10/Apr/2022:07:36:01 +0000] "POST {url} HTTP/1.1" 200 3882 "{url2}" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" "{IP2}"
亚马逊 Linux 2: {IP} - - [10/Apr/2022:07:00:14 +0000] "POST {url} HTTP/1.1" 400 0 "{url2}" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.75 Safari/537.36" "{IP2}"
调用是用jQuery 3.4.1:
var $form = $("#inputForm"); if ($form.length <= 0) return; var data = $form.serialize(); $.ajax({ url: "...", type: "POST", data: data, error: function (jqXHR, textStatus, errorThrown) { alert("There was an error when loading the results (error type = " + errorThrown + ")."); }, success: function (result) { $("#calculationTarget").html(result) });
如果将项目从 ASP.NET Core 3.0 更新到 ASP.NET Core 3.1,则问题不再存在。
有一个非常简单的修复,正在更新到 ASP.NET Core 3.1
。
在此版本中,您遇到的问题已得到修复。
请参阅以下更新步骤。
如果您有
global.json
文件以特定.NET Core SDK
版本为目标,请更新版本 属性。{ "sdk": { "version": "3.1.101" } }
将 TFM 更新为
netcoreapp3.1
,如下所述。<Project Sdk="Microsoft.NET.Sdk.Web"> <PropertyGroup> <TargetFramework>netcoreapp3.1</TargetFramework> </PropertyGroup> </Project>
您需要更新包引用。为此,请将每个
Microsoft.AspNetCore.*
(* 表示通配符)更新为3.1.0
(或任何更高版本)。如果您正在使用 Docker(我认为您是),那么您需要使用
ASP.NET Core 3.1
基础图像。请参阅下面的示例。$ docker pull mcr.microsoft.com/dotnet/aspnet:3.1
有关额外的步骤和信息,请参阅 the official guide from migrating to ASP.NET Core 3.1
。
总而言之,将您当前的应用程序升级到 ASP.NET Core 3.1
应该可以解决您的问题。