来自 Javascript AJAX 的 ASP.NET MVC 操作调用收到 500 内部服务器错误
Posted
技术标签:
【中文标题】来自 Javascript AJAX 的 ASP.NET MVC 操作调用收到 500 内部服务器错误【英文标题】:ASP.NET MVC Action Call from Javascript AJAX Receives 500 Internal Server Error 【发布时间】:2019-09-29 06:10:12 【问题描述】:使用 ajax 调用具有 IIS 7.5 网站的服务器中的控制器操作时收到“500 内部服务器错误”消息。进程在 localhost 开发环境中运行良好。
该过程涉及 Ajax 调用,该调用将 json 对象发送到控制器操作方法,然后控制器操作方法发回 json 消息。我已经尝试在 Routeconfig 文件中创建自定义路由以考虑 iis 站点名称。即,“http://localhost:3000/home”与“http://SiteName/defaultapplicationpage”。
JS 文件
$.ajax(
async: false,
type: "POST",
url: "/TimeEntryWeeklyReportsTest/Home/CheckIfRecordsExist",
//url: "/Home/CheckIfRecordsExist",
data: ' data:' + jsondata + '',
contentType: "application/json; charset=utf-8",
dataType: "json"
).done(function (response)
console.log(response);
if (response === "true")
var param = "&StartDate=" + data.StartDate + "&EndDate=" + data.EndDate;
param = Employeefilter !== undefined ? param + "&" + Employeefilter + "=" + data.EmployeeUserid : param + "&Employee=" + data.EmployeeUserid;
$('#successmsg').html("Successful");
window.location.href = url + param + "&rs:Format=" + documentType;
else
$('#errmsg').html("No records found.");
throw 'records not found error';
).fail(function (response)
console.log('Error: ' + response);
);
CS 控制器
[HttpPost]
[Route("TimeEntryWeeklyReportsTest/Home/CheckIfRecordsExist")]
public JsonResult CheckIfRecordsExist(FormData data)
string strID = GetIDFromUser((!String.IsNullOrEmpty(GetUser())) ? GetUser() : Environment.UserName);
var results = timeEntry.TimeEntryReport(data.EmployeeSupervisor == "Supervisor" ? null : data.EmployeeUserid, data.EmployeeSupervisor == "Employee" ? null : data.EmployeeUserid, Convert.ToDateTime(data.Startdate), Convert.ToDateTime(data.Enddate)).ToList<TimeEntryReport_Result>();
if (results.Count != 0)
return Json("true", JsonRequestBehavior.AllowGet);
else
return Json("false", JsonRequestBehavior.AllowGet);
路由配置
public class RouteConfig
public static void RegisterRoutes(RouteCollection routes)
routes.IgnoreRoute("resource.axd/*pathInfo");
routes.MapRoute(
name: "CheckIfRecordsExist",
url: "TimeEntryWeeklyReportsTest/controller/action",
defaults: new controller = "Home", action = "CheckIfRecordsExist"
);
routes.MapRoute(
name: "Default",
url: "controller/action/id",
defaults: new controller = "Home", action = "Index", id = UrlParameter.Optional
);
预期的结果是让方法返回“true”或“false”语句。好像没有处理ajax调用,收到500内部错误。
【问题讨论】:
那个 500 错误的细节非常重要。从客户端的角度来看,500 的字面意思只是“服务器出了点问题”。这些细节通常不会交给客户,因为用户不需要知道。但是,如果您在服务器上进行调试,您可以看到实际的异常是什么,这将是修复它的第一步。如果在调试时找不到它,您也可以在事件查看器中找到它。 同意斯科特的建议。此外,如果您已经实现了错误处理,请尝试在那里放置一个喙点。另外,为了快速检查,在控制器中添加 try catch 块,仅用于测试。 另外,除上述之外,删除async: false
。这是非常糟糕的做法,您不需要它,因为您已经实现了承诺回调。
【参考方案1】:
尝试像这样在您的控制器中服务 json 并在 javascript 中使用它
public async Task<JsonResult> DonutChartData()
int tagIn = (await db.Tag.Where(x => x.IsIn == true).ToListAsync()).Count;
int cardIn = (await db.Entry.Where(c => c.Type == Type.Card).Where(x => x.IsExit == false).ToListAsync()).Count;
int reservedIn = (await db.Cars.Where(c => c.Type == Type.Pin).Where(x => x.IsExit == false).ToListAsync()).Count;
DonutChart _chart = new DonutChart();
_chart.labels = new string[] "x", "y", "x" ;
_chart.datasets = new List<DonutChartDatasets>();
List<DonutChartDatasets> _dataSet = new List<DonutChartDatasets>();
_dataSet.Add(new DonutChartDatasets()
label = "Whois",
//TO-DO: Add Reserve to Report
data = new int[] cardIn, tagIn, reservedIn ,
backgroundColor = new string[] "rgba(54, 162, 235,0.5)", "rgba(255, 205, 86,0.5)", "rgba(255,99,132,0.5)" ,
borderColor = new string[] "rgb(54, 162, 235)", "rgb(255, 205, 86)", "rgb(255,99,132)" ,
borderWidth = "1"
);
_chart.datasets = _dataSet;
return Json(_chart, JsonRequestBehavior.AllowGet);
在您的视图中,脚本以这种方式使用数据:
jQuery.extend(
getValues: function (url)
var result = null;
$.ajax(
url: url,
type: 'get',
contentType: "application/json; charset=utf-8",
dataType: "json",
async: false,
success: function (data)
result = data;
);
return result;
);
【讨论】:
以上是关于来自 Javascript AJAX 的 ASP.NET MVC 操作调用收到 500 内部服务器错误的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET Web API 在来自 Chrome 扩展的并发 AJAX 调用上崩溃
ASP.NET / JavaScript - Ajax 调用,如何?
获取JavaScript和ASP.NET交谈(在AJAX之外)
JavaScript-Runoob-AJAX:ASP/PHP 实例