2016-05-03 2 views
0

У меня есть страница с ошибкой на IIS8.5. Иногда сама страница ошибки генерирует исключение:asp.net Пользовательская страница ошибки не работает

Ссылка на объект не установлена ​​в экземпляр объекта.

Это часть моего кода позади:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
     HttpContext.Current.Response.StatusCode = 500 
     'Dim CurrentException As Exception = Server.GetLastError() 
     'virheettxt.text = CurrentException.Message 
     Dim hostName = System.Net.Dns.GetHostName() 



     Dim ctxOBJ As HttpContext 
     Dim exceptionOBJ As Exception 
     Dim errorInfoTXT As String 

     ctxOBJ = HttpContext.Current() 

     exceptionOBJ = ctxOBJ.Server.GetLastError() 

     errorInfoTXT = " <br>Offending URL: " & iif(Not ctxOBJ Is Nothing, ctxOBJ.Request.Url.ToString(), "ei saatavilla") & 
"<br>Source: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.Source.ToString(), "ei saatavilla") & 
"<br>Message: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.Message.ToString(), "ei saatavilla") & 
"<br>Stack trace: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.StackTrace.ToString(), "ei saatavilla") & 
"<br>Target Site: " & iif(Not exceptionOBJ Is Nothing, exceptionOBJ.TargetSite.ToString(), "ei saatavilla") & 
"<br>Server: " & hostName 
     Dim virheurlsc = ctxOBJ.Request.Url.ToString() 



     ctxOBJ.Server.ClearError() 

Ошибка происходит от линии: errorInfoTXT = "
Оскорблять URL: ......

И если есть способ захватить строку с ошибкой, мне это действительно нужно в некоторых случаях ...

+0

Пожалуйста, см [Добавить номера строк для стека трассировки веб-сайта ASP.NET, развернутого в режиме выпуска] (http://stackoverflow.com/a/20069668/1115360) для вашего второго вопроса. –

+0

Как это сделать? – Timo77

+0

Я думаю, что ответ, о котором я говорил, говорит вам об этом. –

ответ

0

Проблема возникает из-за использования Iif, который оценивает как истинные, так и ложные случаи. Использование If() operator вместо этого предотвратит это.

Вы должны также проверить, если ctxOBJ ничего, прежде чем пытаться использовать его, и если вы реверс истинные и ложные аргументы в If() S это сделает его немного проще:

Dim ctxOBJ As HttpContext = HttpContext.Current() 
Dim exceptionOBJ As Exception = Nothing 

If ctxOBJ IsNot Nothing Then 
    exceptionOBJ = ctxOBJ.Server.GetLastError() 
End If 

Dim errorInfoTXT As String = " <br>Offending URL: " & If(ctxOBJ Is Nothing, "ei saatavilla", ctxOBJ.Request.Url.ToString()) & 
"<br>Source: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.Source.ToString()) & 
"<br>Message: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.Message.ToString()) & 
"<br>Stack trace: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.StackTrace.ToString()) & 
"<br>Target Site: " & If(exceptionOBJ Is Nothing, "ei saatavilla", exceptionOBJ.TargetSite.ToString()) & 
"<br>Server: " & hostName 
Смежные вопросы