Ошибка возникает при попытке отправить ответ клиенту, но он отключился.Вы можете проверить это, установив точку останова в Response.Redirect или куда бы вы ни отправляли данные клиенту, подождите, пока Visual Studio достигнет точки останова, а затем отмените запрос в IE (используя x в строке адреса).Это должно привести к возникновению ошибки.
Чтобы зафиксировать ошибку, вы можете использовать следующее:
try
{
Response.Redirect("~/SomePage.aspx");
Response.End();
}
catch (System.Threading.ThreadAbortException)
{
// Do nothing. This will happen normally after the redirect.
}
catch (System.Web.HttpException ex)
{
if (ex.ErrorCode == unchecked((int)0x80070057)) //Error Code = -2147024809
{
// Do nothing. This will happen if browser closes connection.
}
else
{
throw ex;
}
}
Или в C # 6 вы можете использовать фильтры исключений, чтобы предотвратить повторную ошибку:
try
{
Response.Redirect("~/SomePage.aspx");
Response.End();
}
catch (System.Threading.ThreadAbortException)
{
// Do nothing. This will happen normally after the redirect.
}
catch (System.Web.HttpException ex) when (ex.ErrorCode == unchecked((int)0x80070057))
{
// Do nothing. This will happen if browser closes connection.
}
Это лучший способ отладки, так как он остановится на операторе, генерирующем исключение с текущим состоянием и всеми локальными переменными, сохраненными вместо команды на выброс внутри блока catch.