无法在控制器中获取错误 500 详细信息
Cannot get error 500 details in controller
我有一个随机引发异常(内部服务器错误)的简单 Rest Web 服务。
当我在控制台程序中以 50.000 次迭代循环强调此 Web api 时,我注意到了这一点。
我在这个客户端得到了什么:
{StatusCode:500,ReasonPhrase:'Internal Server Error',版本:1.1,
我想要的是获得这个 Error 500 的详细信息。
但是我无法在我的控制器中捕捉到它,代码没有被捕捉到。
控制器代码:
[HttpPost]
[Route("{IdLog}/message")]
public string CreateLogMsg(long IdLog, [FromBody] TlogLineDTO oLogLine)
{
long lTmp = 0;
try
{
if (ModelState.IsValid)
{
string sTmp = _oExploitBll.InsertNewLogLine(oLogLine).ToString();
if (!long.TryParse(sTmp, out lTmp))
{
// Create a new file
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine(sTmp);
}
}
return sTmp;
}
else
{
// Create a new file where to put the error message
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine("Ko");
}
return "Ko";
}
}
catch (Exception ex)
{
string sMsgErr = ex.Message + "-" + ex.StackTrace;
// Create a new file
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine(sMsgErr);
}
return "0";
}
}
我怎样才能让它进入捕获状态?
有人有想法吗?
非常感谢。
埃里克
如果如您所说,错误发生是因为服务器压力过大,则收到错误的请求永远不会到达控制器。实际上,服务器甚至无法将它们排入队列。 Sso 你无法处理它们,除非你添加一个从客户端接收请求的边车服务器,将它们转发到你的服务器然后
- 如果响应正常将响应转发给客户端
- 否则处理错误
在实际情况下,您使用负载均衡器在更多服务器之间分配请求负载
事实上,我已经更正了代码并为 http 请求添加了 2 次重试循环,它似乎有效:当 http 请求失败时,我重试一次(或我想要的重试次数)并且一般第二次重试http请求成功。
但是我还是不知道为什么有时候http请求会失败
我有一个随机引发异常(内部服务器错误)的简单 Rest Web 服务。 当我在控制台程序中以 50.000 次迭代循环强调此 Web api 时,我注意到了这一点。 我在这个客户端得到了什么:
{StatusCode:500,ReasonPhrase:'Internal Server Error',版本:1.1,
我想要的是获得这个 Error 500 的详细信息。 但是我无法在我的控制器中捕捉到它,代码没有被捕捉到。 控制器代码:
[HttpPost]
[Route("{IdLog}/message")]
public string CreateLogMsg(long IdLog, [FromBody] TlogLineDTO oLogLine)
{
long lTmp = 0;
try
{
if (ModelState.IsValid)
{
string sTmp = _oExploitBll.InsertNewLogLine(oLogLine).ToString();
if (!long.TryParse(sTmp, out lTmp))
{
// Create a new file
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine(sTmp);
}
}
return sTmp;
}
else
{
// Create a new file where to put the error message
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine("Ko");
}
return "Ko";
}
}
catch (Exception ex)
{
string sMsgErr = ex.Message + "-" + ex.StackTrace;
// Create a new file
Random rnd = new Random();
using (System.IO.StreamWriter sw = System.IO.File.AppendText(@"E:\Temp200707\REF_" + rnd.Next().ToString() + ".txt"))
{
sw.WriteLine(sMsgErr);
}
return "0";
}
}
我怎样才能让它进入捕获状态? 有人有想法吗?
非常感谢。
埃里克
如果如您所说,错误发生是因为服务器压力过大,则收到错误的请求永远不会到达控制器。实际上,服务器甚至无法将它们排入队列。 Sso 你无法处理它们,除非你添加一个从客户端接收请求的边车服务器,将它们转发到你的服务器然后
- 如果响应正常将响应转发给客户端
- 否则处理错误
在实际情况下,您使用负载均衡器在更多服务器之间分配请求负载
事实上,我已经更正了代码并为 http 请求添加了 2 次重试循环,它似乎有效:当 http 请求失败时,我重试一次(或我想要的重试次数)并且一般第二次重试http请求成功。 但是我还是不知道为什么有时候http请求会失败