我正在处理一个在我的asp.net mvc控制器中调用动作的按钮。我试图捕捉错误并以合适的方式向用户显示错误,但我似乎无法弄清楚如何正确地做到这一点。每当我在我的控制器中强制执行异常(用于测试目的)时,我的ajax调用的.sucess部分仍然会被解雇。这是我的ajax电话:
$(document).ready(function() {
$("#del").on("click", function() {
var message;
$.ajax({
url: "@Url.Action("DeleteImage", "UnitSummary")",
type: "GET",
dataType: "json",
data: { unitId: "@Model.UnitId" },
error: function(msg) {
message = msg;
$('#delsection').hide().html('<div class="alert alert-danger"><strong>Ouch!</strong> ' + message.statusText + '</div>').fadeIn('slow');
},
success: function(msg) {
message = msg;
$('#delsection').hide().html('<div class="alert alert-success"><strong>Success!</strong> Image was deleted.</div>').fadeIn('slow');
}
});
});
这是我的控制者:
[HttpGet]
public ActionResult DeleteImage(int unitId)
{
try
{
throw new Exception("Forced error");
UnitClient.UpdateUnitImage(unitId, new byte[0]);
}
catch (Exception e)
{
Log.Error(e);
return Json(new { e.Message }, JsonRequestBehavior.AllowGet);
}
return Json(new JsonResult(), JsonRequestBehavior.AllowGet);
}
即使未删除图像,也始终会调用成功。我在这里缺少什么?
答案 0 :(得分:2)
每当我在控制器中强制执行异常(用于测试目的)时 我的ajax电话的.sucess部分我仍然被解雇了。
以下代码行不是jQuery的ajax
解释为来自服务器的错误响应(因此没有调用error
回调), 但是 常规200 OK
回复:
return Json(new { e.Message }, JsonRequestBehavior.AllowGet);
请改为:
return new HttpStatusCodeResult(HttpStatusCode.BadRequest, e.Message);
这是HTTP状态代码发挥作用的地方,BadRequest
是HTTP错误状态代码。
以下是BadRequest
的更多信息:
等效于HTTP状态400. BadRequest表示该请求 服务器无法理解。没有时发送BadRequest 其他错误适用,或者确切错误未知或确实存在 没有自己的错误代码。