【发布时间】:2016-02-06 16:38:57
【问题描述】:
如果用户的上传时间超过 15 分钟,我们有一个图片上传页面会超时。
我们正在捕获超时发生的 HttpException。但是我们怎么知道异常是因为超时而发生的,所以我们可以返回特定的消息呢?
我们的代码:
try
{
// do stuff here
}
catch (HttpException ex)
{
// What can we check to know if this is a timeout exception?
// if (ex == TimeOutError)
// {
// return "Took too long. Please upload a smaller image.";
// }
return "Error with image. Try again.";
}
catch (Exception ex)
{
return "Error with image. Try again.";
}
以及超时错误是什么样子的:
System.Web.HttpException (0x80004005): Request timed out.
at System.Web.HttpRequest.GetEntireRawContent()
at System.Web.HttpRequest.GetMultipartContent()
at System.Web.HttpRequest.FillInFormCollection()
at System.Web.HttpRequest.EnsureForm()
at System.Web.HttpRequest.get_Form()
at MyStore.upload.ProcessRequest(HttpContext context)
ex.ErrorCode=-2147467259
ex.GetHttpCode=500
ex.WebEventCode=0
我很犹豫要不要简单地做一个if 语句来比较上面的错误代码。
HttpCode 500 似乎是一个通用的 Internal Server Error 代码,它可能不仅仅发生超时异常。
ErrorCode -2147467259 是我不熟悉的东西。如果该数字对于超时错误保持不变,并且永远不会发生非超时异常,那么我可以对这个数字进行if 比较。
我认为必须有一种简单的方法来知道 HttpException 是否是超时异常,例如:
if (ex == TimeoutError) // what should this be?
更新:
我刚刚尝试捕捉TimeoutException,如下所示,但它仍然只被HttpException捕捉。
try
{
// do stuff here
}
catch (TimeoutException ex)
{
// Timeout doesn't get caught. Must be a different type of timeout.
// So far, timeout is only caught by HttpException.
return "Took too long. Please upload a smaller image.";
}
catch (HttpException ex)
{
// What can we check to know if this is a timeout exception?
// if (ex == TimeOutError)
// {
// return "Took too long. Please upload a smaller image.";
// }
return "Error with image. Try again.";
}
catch (Exception ex)
{
return "Error with image. Try again.";
}
【问题讨论】:
-
ex typeof TimeoutException
-
@YaWang 你应该把它作为答案。
标签: c# asp.net httpexception