Gibt es einen besseren Weg, dies zu tun, als nach Exception String zu suchen?Wie erhalten Sie den Ausnahmetyp ohne den String-Namen-Vergleich (ex.GetType(). FullName) im ASP.NET Page_Error-Handler?
Ich hätte lieber diesen Catch-All-Fehler auf der Seite behandelt, aber für SOAP-Ausnahmen (Web-Service-Aufrufe) muss ich die Details der tatsächlichen Ausnahme protokollieren, die auf dem Server aufgetreten ist, nicht der Client.
Die Eigenschaft ".Detail.InnerText" befindet sich nicht in einer generischen Ausnahme und kann nur nach dem Generieren einer generischen Ausnahme für eine SOAP-Ausnahme abgerufen werden.
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}</pre></div>", realException.Detail.InnerText);
Response.Output.Write("<div style='color:maroon; border:solid 1px maroon;'><pre>{0}\n{1}</pre></div>", ex.Message, ex.StackTrace);
Context.ClearError();
Response.End();
}
}
Ich würde denken, es eine Möglichkeit, die zugrunde liegenden Ausnahme des Typs String-Vergleich ohne ... im Voraus
Dank zu erhalten ist.
Etwas besser zu 'As' Operator zu verwenden, so dass nur ein Cast-Operator benötigt wird, wie in @ Dima's [Antwort] (http://stackoverflow.com/questions/4434030/how-to-get-exception-type-without- String-Name-Ex-Gtterpe-Fullname-Vergleich/4434091 # 4434091). – Richard
Sehr wahr - das ist in der Tat rasant von einem Opcode, obwohl die Einsparungen nicht so klar sind. IIRC, ist die Anweisung, die für "wie" Casting ausgegeben wird, ziemlich ein bisschen teurer als eine C-artige Besetzung. Vielleicht macht "ist" das Gleiche. Auf jeden Fall bevorzuge ich meine Version aus Gründen der Lesbarkeit. – Ben