Как получить тип исключения без сравнения строкового имени (ex.GetType (). FullName) в обработчике ASP.NET Page_Error? - PullRequest
1 голос
/ 14 декабря 2010

Есть ли лучший способ сделать это, чем проверить строку исключения?

Я бы предпочел, чтобы эта общая ошибка была обработана на странице, но для исключений SOAP (вызовов веб-служб) мне нужно регистрировать детали фактического исключения, которое произошло на сервере, а не на клиенте.

Свойство ".Detail.InnerText" не является универсальным исключением и может быть получено только после приведения универсального исключения к исключению SOAP.

<code>    protected void Page_Error(object sender, EventArgs e)
    {
        Exception ex = Context.Server.GetLastError();

        if (ex.GetType().FullName == "System.Web.Services.Protocols.SoapException")
        {
            System.Web.Services.Protocols.SoapException realException = (System.Web.Services.Protocols.SoapException)ex;
            Response.Clear();

            Response.Output.Write(@"<div style='color:maroon; border:solid 1px maroon;'><pre>{0}
", realException.Detail.InnerText); Response.Output.Write ("
{0}\n{1}
", ex.Message, ex.StackTrace); Context.ClearError (); Response.End (); } }

Я думаю, что есть способ получить тип базового исключения без использования сравнения строк ...

Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 14 декабря 2010

Можете ли вы попробовать что-то вроде этого:

var ex = Context.Server.GetLastError();

var soapEx = ex as SoapException;
if(soapEx != null)
{
    //Handle SoapException
}
2 голосов
/ 14 декабря 2010

Либо используйте оператор as:

var ex = Context.Server.GetLastError();

var soapEx = ex as SoapException;
if(soapEx != null)
{
    //Handle SoapException
}

(см. ответ Димы .)

Или сравните объекты типа:

var ex = Context.Server.GetLastError();
if (ex.GetType() == typeof(SoapException) {
  ..
}

Предполагается, что вы захотите получить доступ к некоторому члену SoapException, подход as позволяет избежать многократных проверок типов.

0 голосов
/ 14 декабря 2010
if (ex is System.Web.Services.Protocols.SoapException)
{
    var soapEx = (System.Web.Services.Protocols.SoapException)ex;
    // do your thing
}
...