D 如何使用JSON正文发送错误响应

D 如何使用JSON正文发送错误响应,d,vibed,D,Vibed,我需要发送JSON响应,例如403HTTP错误代码。如何在vibe.d中实现这一点 我目前使用以下代码: T强制代码(T)(HTTPServerResponse,T值,errorcode, HTTPStatus状态=HTTPStatus.禁止) { 如果(!值){ res.writeJsonBody([“代码”:代码],状态); 强制HTTP(错误,状态); } 返回值; } 无效发送代码(T)(HTTPServerResponse res、ErrorCodes、T errorInfo、, HT

我需要发送JSON响应,例如403HTTP错误代码。如何在vibe.d中实现这一点

我目前使用以下代码:

T强制代码(T)(HTTPServerResponse,T值,errorcode,
HTTPStatus状态=HTTPStatus.禁止)
{
如果(!值){
res.writeJsonBody([“代码”:代码],状态);
强制HTTP(错误,状态);
}
返回值;
}
无效发送代码(T)(HTTPServerResponse res、ErrorCodes、T errorInfo、,
HTTPStatus状态=HTTPStatus.禁止)
{
导入vibe.data.json;
res.writeJsonBody([
“代码”:Json(强制转换(int)代码),
“info”:Json(serializeToJsonString(errorInfo))
],身份);
enforceHTTP(false,status);//我需要终止当前操作
}

但其他开发人员抱怨说,错误事件在客户端应用程序中触发了两次。只有一次被注释掉的
writeJsonBody

这是客户端的错误,而不是上面的代码。

这是客户端的错误,而不是上面的代码。

您可能应该在向流写入任何内容之前检查错误,否则,响应可能已发送。您对writeJsonBody的调用已完成所需操作。您能解释一下调用enforceHTTP的必要性吗?注释建议您要抛出一个异常来结束请求的处理?似乎只有在错误情况下才会调用此函数,因此我假设应该编写消费代码中的逻辑,以防止进一步处理。@ColonelThirtyTwo,您是指调用此函数的代码吗?“这里面没有错误。”Tractorpulledprock,好建议。我用我使用的另一个函数更新了这个问题。如您所见,最好以类似于
assert
-的样式使用它。在向流写入任何内容之前,您可能应该检查错误,否则响应可能已经发送。您对writeJsonBody的调用已经完成了所需的操作。您能解释一下调用enforceHTTP的必要性吗?注释建议您要抛出一个异常来结束请求的处理?似乎只有在错误情况下才会调用此函数,因此我假设应该编写消费代码中的逻辑,以防止进一步处理。@ColonelThirtyTwo,您是指调用此函数的代码吗?“这里面没有错误。”Tractorpulledprock,好建议。我用我使用的另一个函数更新了这个问题。正如您所看到的,最好在类似于
断言的样式中使用它。