繁体   English   中英

为什么我的异常无法通过jquery ajax调用控制器来处理?

[英]Why is my exception not picked up by jquery ajax call to controller?

我正在一个按钮上,该按钮在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);
}

即使未删除图像,也总是会调用成功。 我在这里想念什么?

每当我在控制器中强加一个异常(出于测试目的)时,我的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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM