login  Naam:   Wachtwoord: 
Registreer je!
 Forum

ASP.NET C# MVC - error exception

Offline Wijnand - 20/08/2010 14:23 (laatste wijziging 20/08/2010 14:25)
Avatar van WijnandModerator Ik heb een error-controller gebruikt die allerlei errors afvangt. Dit gaat goed.

Nu wil ik een tweede ding hierin zetten namelijk dat ik een mail krijg met de complete error (dus ook met plaats van bestand, regelnummer, etc.

Ik heb deze code:

  1. try
  2. {
  3. ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];
  4. } catch {
  5. }
  6. if (ex != null) {
  7. ViewData["Description"] = ex.Message;
  8. ViewData["Source"] = ex.Source;
  9. ViewData["Inner"] = ex.InnerException;
  10. ViewData["Stack"] = ex.StackTrace;
  11. ViewData["targ"] = ex.TargetSite;
  12. ViewData["extra"] = ex.Data.ToString();
  13. } else {
  14. ViewData["Description"] = "Er is een onbekende error opgetreden.";
  15. }



Hoe kan ik dit zo ombouwen dat ik regelnummer + bestandsnaam en dat soort gegevens kan uitlezen?

Gr,
Wijnand

20 antwoorden

Gesponsorde links
Offline cyberninjah - 20/08/2010 14:54
Avatar van cyberninjah Lid http://msdn.mic...mbers.aspx

Daar al keer naar gekeken ??
Offline Wijnand - 20/08/2010 15:56
Avatar van Wijnand Moderator Eigenlijk niet, maar als ik het zo zie dan weet ik niet hoe ik dat uit de 'exception' kan krijgen.

Ik kan de method 'AllErrors' aanroepen zeg maar, maar krijg die gegevens er niet zo uit dat ik die in een mail (bijvoorbeeld) kan verzenden.
Offline Abbas - 20/08/2010 16:23 (laatste wijziging 20/08/2010 17:04)
Avatar van Abbas Gouden medaille

Crew .NET
Via de stacktrace kan je aan alle verdere info die je nodig hebt: bestandsnaam, methode en lijnnummer bijvoorbeeld.

  1. if (ex != null)
  2. {
  3. //Die 'true' geeft aan dat je info over het bestand nodig hebt.
  4. var trace = new System.Diagnostics.StackTrace(ex, true);
  5. ViewData["Description"] = ex.Message;
  6. //Al die andere die je al had
  7. //Hieronder hetgeen je nog nodig had
  8. ViewData["File"] = trace.GetFrame(0).GetFileName()
  9. ViewData["Methode"] = trace.GetFrame(0).GetMethod().Name;
  10. ViewData["Lijnnummer"] = trace.GetFrame(0).GetFileLineNumber();
  11. }
  12. else
  13. {
  14. ViewData["Description"] = "Er is een onbekende error opgetreden.";
  15. }
Offline Wijnand - 21/08/2010 10:07 (laatste wijziging 23/08/2010 09:37)
Avatar van Wijnand Moderator Geprobeerd:

Ik heb dit staan in de webconfig:
<customErrors mode="On" defaultRedirect="/Error/HttpError/">
</customErrors>

Hij moet dus naar de controller Error gaan en dan de method 'HttpError' uitvoeren. Vrijdag werkte dat, maar nu (zonder iets zinnigs gewijzigd te hebben) krijg ik gewoon zo'n 'Serverfout in toepassing /.' (wit/gele error pagina) te zien. Weet iemand hoe ik dat goed kan aanpassen, want volgens mij zou hij naar Error/HttpError moeten gaan toch?
Offline Abbas - 23/08/2010 10:35
Avatar van Abbas Gouden medaille

Crew .NET
Wat geeft de foutmelding aan?
Offline Wijnand - 23/08/2010 11:04
Avatar van Wijnand Moderator Runtime-fout

Beschrijving: Er is een toepassingsfout opgetreden op de server. Door de huidige aangepaste foutinstellingen voor deze toepassing kunnen de details van de toepassingsfout niet worden weergegeven.

Details: Als u de details van dit specifieke foutbericht zichtbaar wilt maken op de lokale server, maakt u een label <customErrors> in een configuratiebestand web.config dat zich in de hoofdmap van de huidige webtoepassing bevindt. Het attribuut mode van dit label <customErrors> moet vervolgens worden ingesteld op RemoteOnly. Als de details moeten kunnen worden weergegeven op externe systemen, stelt u mode in op Off.


<!-- Web.Config-configuratiebestand -->

<configuration>
<system.web>
<customErrors mode="RemoteOnly"/>
</system.web>
</configuration>
Offline Maarten - 23/08/2010 11:18
Avatar van Maarten Erelid Bekijk de website op de lokale machine of pas idd je configuratiebestand aan, dan krijg je een gedetailleerde foutmelding.
Offline Wijnand - 23/08/2010 13:11
Avatar van Wijnand Moderator Ik had hem gecontroleerd lokaal, dat is dus raar. Maar ik ga even kijken of ik een gedetailleerde error kan krijgen.
Offline lemoinet - 23/08/2010 14:32
Avatar van lemoinet PHP gevorderde werk je met vs2010, dan heb je twee webconfigs, een voor debug en een voor release. misschien staat jouw solution in release mode ipv debug mode.
Offline Wijnand - 23/08/2010 14:43 (laatste wijziging 23/08/2010 15:34)
Avatar van Wijnand Moderator Ik heb VS2008.

[edit]
De error is op de pagina die ik ook een foutmelding moet geven (daarvoor heb ik hem gemaakt), dus ik wil dat ik daar dus niet zo'n rare error krijg, maar gewoon een error 'in de pagina'.
Dit is even voor degene die niet snappen wat ik wil bereiken.

[edit2]
Ik heb al een deel van het probleem opgelost. Ik had zelf iets fout gedaan in de .aspx file.

Maar nu probeer ik Titjes z'n script uit, alleen daar komt die niet. Toen heb ik gekeken en heb ik gezien dat die ex niet gevuld wordt. Hoe is dat mogelijk?

Het volgende werkt dan opeens niet.
try
{
ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];
} catch {
}
Offline Abbas - 23/08/2010 15:40
Avatar van Abbas Gouden medaille

Crew .NET
Doe eens onder die "ex = ..." het volgende: throw ex;
Offline Wijnand - 24/08/2010 09:13
Avatar van Wijnand Moderator Gedaan, maar dat werkt verder niet.
Offline Abbas - 24/08/2010 15:56
Avatar van Abbas Gouden medaille

Crew .NET
Hoe ziet je code er nu dan uit?
Offline Wijnand - 24/08/2010 17:19
Avatar van Wijnand Moderator
  1. Exception ex = null;
  2. try {
  3. ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];
  4. throw ex;
  5. } catch {
  6. }
  7.  
  8. if (ex != null) {
  9. var trace = new System.Diagnostics.StackTrace(ex, true);
  10. ViewData["FileName"] = trace.GetFrame(0).GetFileName();
  11. ViewData["Methode"] = trace.GetFrame(0).GetMethod().Name;
  12. ViewData["Linenumber"] = trace.GetFrame(0).GetFileLineNumber();
  13. ViewData["Description"] = "Er is een onbekende error opgetreden. Neem contact op met de webapplicatie-beheerder.";
  14. } else {
  15. ViewData["Description"] = "Test: Er is een onbekende error opgetreden. Neem contact op met de webapplicatie-beheerder.";
  16. }
  17. ViewData["Main_Title"] = "Foutmelding";
  18. return View("Error");
Offline Maarten - 24/08/2010 17:20
Avatar van Maarten Erelid En als je debugged/quickwatched wordt de ViewData correct ingevuld?
Het toeval wil dat ik nu ook bezig ben met ASP.NET MVC 2, het kan er dus volledig naast zijn, maar misschien zit het stuk over excepties wel goed maar gaat het ergens bij het bezorgen van die data naar de view mis? (vandaar de vraag over de invulling van ViewData, excuses als het oeverloos gezwam is).
Offline Abbas - 24/08/2010 17:44
Avatar van Abbas Gouden medaille

Crew .NET
Die "throw ex" heeft natuurlijk geen zin. Ik had niet gezien dat het if-else buiten de catch stond. Inderdaad zoals Maarten zegt eens werken met breakpoints/watch en kijken wat er in de ViewData komt te zitten.
Offline Wijnand - 25/08/2010 11:54
Avatar van Wijnand Moderator Ik zie nu dat hij deze al niet uitvoert:

ex = (Exception)HttpContext.Application[Request.UserHostAddress.ToString()];

Daarna blijft ex leeg. Hoe kan ik dat aanpassen?

Offline Abbas - 25/08/2010 12:46
Avatar van Abbas Gouden medaille

Crew .NET
Controleer dan eens eerst of er uberhaupt wel iets in Request.UserHostAddress.ToString() zit.
Offline Wijnand - 25/08/2010 15:51 (laatste wijziging 30/08/2010 11:23)
Avatar van Wijnand Moderator Die geeft terug: 127.0.0.1

[edit]
Dit komt dus omdat ik hem lokaal draai. Dat gaat dus goed. Maar ex wordt niet echt werkelijk gevuld. Dat is raar.
Offline Abbas - 30/08/2010 11:56
Avatar van Abbas Gouden medaille

Crew .NET
Heb je al eens vanuit je code-behind (aspx.cs) een Exception gegooid? Bijvoorbeeld bij het klikken op een knop:

  1. public class UwCustomController : Controller
  2. {
  3. public ActionResult ExceptionMethode()
  4. {
  5. //hier al die code die je hebt
  6. }
  7. }

En dan in het buttonClick-event:

  1. throw new Exception("Foutje.");
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.189s