Amazon Linux 2 与 Amazon Linux 1 中的 ASP.NET Core 应用程序的 AJAX 请求失败

发布于 2025-01-12 01:54:49 字数 1492 浏览 1 评论 0原文

我有一个使用 Docker 托管在 Amazon AWS Elastic Beanstalk 中的 ASP.NET Core v.3.0 Web 应用程序。该应用程序在运行 64 位 Amazon Linux (v2.16.11) 的 Docker 中运行良好。当我更新到运行 64 位 Amazon Linux 2 (v3.4.12) 的 Docker 时,请求工作正常,除了 AJAX 请求失败并显示状态代码错误 400“错误请求”。源代码、dockerfile 等没有其他任何变化。只有 Linux 版本从 Amazon Linux 更改为 Amazon Linux 2。有谁知道 Amazon Linux 1 和 Amazon Linux 2 之间的不同之处可能是导致 AJAX 的原因请求失败?

更多信息:

  1. 我无法使用官方 ASP.NET core 3.1 示例复制此错误。我还没有将我的应用程序更新到 v3.1,我很快就会更新,我会更新这个问题。
  2. 控制器内的相关操作不会在 Amazon Linux 2 中返回部分视图。控制器在返回部分视图之前提供日志,并且在 Amazon Linux 2 中不会触发此
  3. 操作。nginx access.log 文件显示以下响应负载均衡器:

Amazon 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,如 Gecko)Chrome/100.0.4896.75 Safari/537.36" "{IP2}"

Amazon Linux 2: {IP} - - [10/4/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,如 Gecko)Chrome/100.0.4896.75 Safari/537.36" "{IP2}"

  1. 调用是使用 jQuery 3.4.1 进行的:

    var $form = $("#inputForm");
    if ($form.length <= 0) 返回;
    var data = $form.serialize();
    $.ajax({
        网址:“...”,
        类型:“帖子”,
        数据:数据,
        错误:函数(jqXHR,textStatus,errorThrown){
            alert("加载结果时发生错误(错误类型 = " + errorThrown + ")。");
        },
        成功:函数(结果){
            $("#calculationTarget").html(结果)
        });
    

I have an ASP.NET Core v.3.0 web application hosted in Amazon AWS Elastic Beanstalk using Docker. The application works fine in Docker running 64bit Amazon Linux (v2.16.11). When I update to Docker running 64bit Amazon Linux 2 (v3.4.12) the requests work fine except for AJAX requests which fail with Status Code Error 400 "Bad request". Nothing else has changed in the source code, dockerfile etc. Only the Linux version has changed from Amazon Linux to Amazon Linux 2. Does anybody have an idea what is different between Amazon Linux 1 and Amazon Linux 2 that may be the cause leading to AJAX requests failing?

More info:

  1. I cannot replicate this error with the official ASP.NET core 3.1 examples. I have not updated my application to v3.1, I will do it soon and I will update this question.
  2. The relevant action inside the controller does not return the partial view in Amazon Linux 2. The controller provides a log just before returning the partial view and this is not triggered in Amazon Linux 2.
  3. The nginx access.log file shows the following response of the load balancer:

Amazon 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}"

Amazon 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}"

  1. The call is made with 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)
        });
    

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

羁〃客ぐ 2025-01-19 01:54:49

如果项目从 ASP.NET Core 3.0 更新到 ASP.NET Core 3.1,则该问题不再存在。

The issue is no longer present if the project is updated from ASP.NET Core 3.0 to ASP.NET Core 3.1.

梦境 2025-01-19 01:54:49

有一个非常简单的修复方法,即更新到 ASP.NET Core 3.1。

在此版本中,您遇到的问题已得到解决。


请参阅以下步骤进行更新。

  1. 如果您有一个 global.json 文件来定位特定的 .NET Core SDK 版本,请更新版本属性。

    <代码>{
      “SDK”:{
        “版本”:“3.1.101”
      }
    }
    
  2. 将 TFM 更新为 netcoreapp3.1,如下所述。

    
      <财产组>
        netcoreapp3.1
      
    
    
  3. 您需要更新包引用。为此,请将每个 Microsoft.AspNetCore.** 表示通配符)更新为 3.1.0(或任何更高版本)。

  4. 如果您正在使用 Docker(我认为您正在使用),那么您需要使用 ASP.NET Core 3.1 基础映像。请参阅下面的示例。

    <前><代码>$ docker pull mcr.microsoft.com/dotnet/aspnet:3.1

有关额外步骤和信息,请参阅 迁移到 ASP.NET Core 3.1 的官方指南


总之,将当前应用程序升级到 ASP.NET Core 3.1 应该可以解决您的问题。

There is a very simple fix, which is updating to ASP.NET Core 3.1.

In this version, the issue that you have having is fixed.


See the steps below for updating.

  1. If you have a global.json file to target a specific .NET Core SDK version, update the version property.

    {
      "sdk": {
        "version": "3.1.101"
      }
    }
    
  2. Update the TFM to netcoreapp3.1, as described below.

    <Project Sdk="Microsoft.NET.Sdk.Web">
      <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
      </PropertyGroup>
    </Project>
    
  3. You need to update the package references. To do this, update every Microsoft.AspNetCore.* (* meaning wildcard) to 3.1.0 (or any version later).

  4. If you are using Docker (which I think you are), then you need to use an ASP.NET Core 3.1 base image. See an example below.

    $ docker pull mcr.microsoft.com/dotnet/aspnet:3.1
    

For extra steps and information, see the official guide from migrating to ASP.NET Core 3.1.


In summary, upgrading your current application to ASP.NET Core 3.1 should fix your issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文