处理错误请求的自定义错误消息
Handle custom Error message on Bad request
我正在开发 Android 应用程序(客户端)。服务器使用 C#。当我特别提出某些 Post 的请求时,我收到错误请求的错误消息,例如 'HTTP/1.1 404 Not Found',这在我搜索的项目不正确时没关系。但是在错误的请求下,服务器还向我发送了 JSON 中的消息正文,如下所示:
{
"responseMessage":"The item you searched not found"
}
有没有办法获取此消息(而不是错误请求消息 'HTTP/1.1 404 Not Found')并将其显示为对错误请求的响应?后端工作正常,我在 Postman 上检查过。我的 Post 请求代码是这样的:
Json := '{ '+
' "code":"'+str+'",'+
' "userid":'+userid+''+
' } ';
JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);
try
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.CharSet := 'utf-8';
try
sResponse := IdHTTP1.Post('http://....', JsonToSend);
except
on e : Exception do
begin
ShowMessage(e.Message); // this message is : HTTP/1.1 404 Not Found
Exit;
end;
end;
finally
JsonToSend.Free;
end;
要接收有关错误的 JSON 内容,您有 2 个选择:
抓住凸起的 EIdHTTPProtocolException
并从其 ErrorMessage
属性 中读取 JSON,而不是 Message
属性:
try
sResponse := IdHTTP1.Post(...);
except
on E: EIdHTTPProtocolException do
begin
sResponse := E.ErrorMessage;
end;
on E: Exception do
begin
ShowMessage(e.Message);
Exit;
end;
end;
在TIdHTTP.HTTPOptions
属性中启用hoNoProtocolErrorException
和hoWantProtocolErrorContent
标志以防止TIdHTTP.Post()
引发EIdHTTPProtocolException
在 HTTP 失败时,而只是 return 将 JSON 添加到您的 sResponse
变量。如果需要,您可以使用 TIdHTTP.ResponseCode
属性 来检测 HTTP 故障:
IdHTTP1.HTTPOptions := IdHTTP1.HTTPOptions + [hoNoProtocolErrorException, hoWantProtocolErrorContent];
try
sResponse := IdHTTP1.Post(...);
if IdHTTP1.ResponseCode <> 200 then ...
except
on E: Exception do
...
end;
我正在开发 Android 应用程序(客户端)。服务器使用 C#。当我特别提出某些 Post 的请求时,我收到错误请求的错误消息,例如 'HTTP/1.1 404 Not Found',这在我搜索的项目不正确时没关系。但是在错误的请求下,服务器还向我发送了 JSON 中的消息正文,如下所示:
{
"responseMessage":"The item you searched not found"
}
有没有办法获取此消息(而不是错误请求消息 'HTTP/1.1 404 Not Found')并将其显示为对错误请求的响应?后端工作正常,我在 Postman 上检查过。我的 Post 请求代码是这样的:
Json := '{ '+
' "code":"'+str+'",'+
' "userid":'+userid+''+
' } ';
JsonToSend := TStringStream.Create(Json, TEncoding.UTF8);
try
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.CharSet := 'utf-8';
try
sResponse := IdHTTP1.Post('http://....', JsonToSend);
except
on e : Exception do
begin
ShowMessage(e.Message); // this message is : HTTP/1.1 404 Not Found
Exit;
end;
end;
finally
JsonToSend.Free;
end;
要接收有关错误的 JSON 内容,您有 2 个选择:
抓住凸起的
EIdHTTPProtocolException
并从其ErrorMessage
属性 中读取 JSON,而不是Message
属性:try sResponse := IdHTTP1.Post(...); except on E: EIdHTTPProtocolException do begin sResponse := E.ErrorMessage; end; on E: Exception do begin ShowMessage(e.Message); Exit; end; end;
在
TIdHTTP.HTTPOptions
属性中启用hoNoProtocolErrorException
和hoWantProtocolErrorContent
标志以防止TIdHTTP.Post()
引发EIdHTTPProtocolException
在 HTTP 失败时,而只是 return 将 JSON 添加到您的sResponse
变量。如果需要,您可以使用TIdHTTP.ResponseCode
属性 来检测 HTTP 故障:IdHTTP1.HTTPOptions := IdHTTP1.HTTPOptions + [hoNoProtocolErrorException, hoWantProtocolErrorContent]; try sResponse := IdHTTP1.Post(...); if IdHTTP1.ResponseCode <> 200 then ... except on E: Exception do ... end;