显示来自 AJAX 调用的有意义的错误消息时出现问题
Problem displaying meaningful error message from AJAX call
我正在从 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
包含 方式 比我想显示给用户的信息多。它包括对异常的描述,以及堆栈跟踪、headers 和许多其他内容。
在上面的示例中,我只想显示 "This is an exception."。尝试解析来自 e.responseText
的消息是我唯一的解决方案吗?这是其他人在做的吗?
In the example above, I'd want to only display "This is an exception.".
要显示"This is an exception.",您可以使用以下代码片段:
.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
.
获取异常消息
测试结果:
我正在从 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
包含 方式 比我想显示给用户的信息多。它包括对异常的描述,以及堆栈跟踪、headers 和许多其他内容。
在上面的示例中,我只想显示 "This is an exception."。尝试解析来自 e.responseText
的消息是我唯一的解决方案吗?这是其他人在做的吗?
In the example above, I'd want to only display "This is an exception.".
要显示"This is an exception.",您可以使用以下代码片段:
.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
.
测试结果: