You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET 6部署Azure后GetAllVehicles() Ajax调用失败,本地正常

问题描述

该功能在Visual Studio 2022本地运行完全正常,但部署到Azure后调用失败。已尝试调整调用方式、路由等修改,所有调整在本地均有效,但部署到Azure后仍报错。项目中另有一个逻辑几乎完全相同的接口(仅数据不同),该接口在Azure上运行正常。


前端脚本(index.html)

<script type="text/javascript">
    $(document).ready(function () {
        $('#vehiclesTable').DataTable({
            "processing": true,
            "serverSide": true,
            "ajax": {
                "url": "@Url.Action("GetAllVehicles", "Vehicles")",
                "type": "GET",
                "error": function (xhr, error, thrown) {
                    console.log("Error: ", xhr.responseText);
                }
            },
            "columns": [
                { "data": "customerName" },
                { "data": "year" },
                { "data": "make" },
                { "data": "model" },
                { "data": "trim" },
                { "data": "engineSize" },
                { "data": "transmission" },
                { "data": "transmissionType" },
                { "data": "mileage" },
                {
                    "data": "id",
                    "render": function (data, type, row) {
                        return `<a href="/Vehicles/Details/${data}" class="btn btn-info">Details</a>
                                        <a href="/Vehicles/Edit/${data}" class="btn btn-warning">Edit</a>
                                        <a href="/Vehicles/Delete/${data}" class="btn btn-danger">Delete</a>`;
                    },
                    "orderable": false
                }
            ],
            "order": [[0, "asc"]]
        });
    });
</script>

后端接口(VehiclesController)

[HttpGet]
public async Task<IActionResult> GetAllVehicles()
{
    var draw = HttpContext.Request.Query["draw"].FirstOrDefault();
    var start = Request.Query["start"].FirstOrDefault();
    var length = Request.Query["length"].FirstOrDefault();
    var sortColumn = Request.Query["columns[" + Request.Query["order[0][column]"].FirstOrDefault() + "][data]"].FirstOrDefault();
    var sortColumnDirection = Request.Query["order[0][dir]"].FirstOrDefault();
    var searchValue = Request.Query["search[value]"].FirstOrDefault();
    int pageSize = length != null ? Convert.ToInt32(length) : 0;
    int skip = start != null ? Convert.ToInt32(start) : 0;
    int recordsTotal = 0;

    // 获取所有数据
    var vehiclesData = _context.Vehicles
     .Include(j => j.Customer)
     .Select(j => new
     {
         j.Id,
         CustomerName = j.Customer.FirstName + " " + j.Customer.LastName,
         j.Year,
         j.Make,
         j.Model,
         j.Trim,
         j.EngineSize,
         j.Transmission,
         j.TransmissionType,
         j.Mileage

     });

    // 搜索
    if (!string.IsNullOrEmpty(searchValue))
    {
        vehiclesData = vehiclesData.Where(j =>
     j.CustomerName.Contains(searchValue) ||
     j.Year.ToString().Contains(searchValue) ||
     j.Make.Contains(searchValue) ||
     j.Model.Contains(searchValue) ||
     j.Trim.Contains(searchValue) ||
     j.EngineSize.Contains(searchValue) ||
     j.Transmission.Contains(searchValue) ||
     j.TransmissionType.Contains(searchValue) ||
     j.Mileage.Contains(searchValue)
 );

    }

    // 排序
    if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDirection)))
    {
        var sortExpression = $"{sortColumn} {sortColumnDirection}";
        vehiclesData = vehiclesData.OrderBy(sortExpression);
    }

    // 总行数统计
    recordsTotal = vehiclesData.Count();

    // 分页
    var data = vehiclesData.Skip(skip).Take(pageSize).ToList();

    // 返回Json数据
    var jsonData = new
    {
        draw = draw,
        recordsFiltered = recordsTotal,
        recordsTotal = recordsTotal,
        data = data.Select(v => new
        {
            customerName = v.CustomerName,
            year = v.Year,
            make = v.Make,
            model = v.Model,
            trim = v.Trim,
            engineSize = v.EngineSize,
            transmission = v.Transmission,
            transmissionType = v.TransmissionType,
            mileage = v.Mileage,
            id = v.Id
        })
    };


    return Ok(jsonData);
}

排查方向

  • 查看Azure应用日志:在Azure门户的应用服务中打开“日志流”或“应用日志”,获取具体错误信息,比如数据库连接异常、权限问题、路由匹配失败等。
  • 核对数据库配置:确认Azure上的数据库连接字符串正确,且数据库服务器已允许Azure服务访问。
  • 验证接口URL:直接在浏览器中访问接口的完整URL(如https://你的域名/Vehicles/GetAllVehicles),检查返回结果是否正常。
  • 替换动态排序逻辑:后端使用的OrderBy(sortExpression)动态LINQ可能在Azure环境存在兼容问题,尝试替换为强类型排序(比如根据字段名分支处理)。
  • 对比正常接口差异:逐行对比当前接口与正常运行接口的代码,包括路由属性、查询逻辑、返回格式等,找出细微差别。
  • 确认.NET版本一致性:检查Azure应用服务的.NET运行时版本是否与本地开发环境一致,避免版本差异导致的兼容问题。

内容的提问来源于stack exchange,提问作者Morbidd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:40:57