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
相关产品推荐
相关产品推荐

