首页 > 解决方案 > 显示来自 AJAX 调用的有意义的错误消息时出现问题

问题描述

我正在从 AJAX 调用 Razor Pages 处理程序,如下所示:

$.ajax({
    url: '?handler=Delete',
    data: {
        id: $(this).data('id')
    }
})
.fail(function (e) {
    alert(e.responseText);
});

这是我的处理程序,用于测试发生异常时会发生什么:

public async System.Threading.Tasks.Task OnGetDelete(int id)
{
    throw new Exception("This is an exception.");
}

如果在我的处理程序中抛出异常,那么我想显示错误的描述。问题是它e.responseText包含信息比我想向用户显示的要多。它包括对异常的描述,以及堆栈跟踪、标头和许多其他内容。

在上面的示例中,我只想显示“这是一个例外。”。是我尝试解析消息的唯一解决方案e.responseText吗?这是其他人正在做的吗?

标签: javascriptajaxasp.net-corerazor-pages

解决方案


在上面的示例中,我只想显示“这是一个例外。”。

要显示“这是一个异常。”,您可以使用以下代码段:

.fail(function (e) {
    //console.log(e);
    var mes = e.responseText.split('\n')[0];
    alert(mes.substring(17, mes.length - 1));
})

测试结果:

在此处输入图像描述

更新:

如果可能,您可以尝试动态捕获该特定处理程序方法中发生的异常,然后生成您预期的响应,如下所示。

app.Use(async (context, next) =>
{
    try
    {
        await next();
    }
    catch (Exception ex)
    {

        if (context.Request.Path.StartsWithSegments("{request_path_here}") && context.Request.Query["handler"].Any())
        {
            if (context.Request.Query["handler"]== "Delete")
            {
                context.Response.StatusCode = 500;
                var result = System.Text.Json.JsonSerializer.Serialize(new { error = ex.Message });
                context.Response.ContentType = "application/json";
                await context.Response.WriteAsync(result);
            }
        }
    }
});

responseText"{"error":"This is an exception."}",您可以使用JSON.parse(e.responseText).error.

测试结果:

在此处输入图像描述


推荐阅读