Avatar billede larsny Nybegynder
24. februar 2007 - 19:45 Der er 24 kommentarer og
1 løsning

customErrors og fejlbesked

Hej

Jeg har fået sat min side op med customErrors og den redirecter som den skal.

Men hvordan får jeg fat i fejlbeskeden?

Jeg vil gerne have at den side man bliver sendt over til, sender en mail til min mail med den fulde fejlbeskrivelse.

Mail osv. kan jeg sagtens, men kan ikke lige finde ud af at få fat i fejlbeskeden.

På forhånd tak
Avatar billede dr_chaos Nybegynder
24. februar 2007 - 21:46 #1
Du kan fange den med:
Server.GetLastError
Avatar billede kalp Novice
24. februar 2007 - 22:18 #2
du sender en mail med denne kode.

private void sendMail(string from, string to, string subject, string body){
MailMessage mail = new MailMessage();
mail.From = new MailAddress(from);
mail.To.Add(to);
mail.Subject = subject;
mail.Body = body;
SmtpClient smtp = new SmtpClient("asmtp.mail.dk"); // for tdc f.eks men du skal skrive din egen.

//hvis der er brugernavn og adgangskode på smtp serveren skal nedenstående linje med og ellers ikke!!
smtp.Credentials = new System.Net.NetworkCredential("brugernavn","password");
smtp.Send(mail);
}


lad det være en metode i din customError side.. og du smider bare fejlmeddelsen ind i body:)
Avatar billede dr_chaos Nybegynder
24. februar 2007 - 23:10 #3
gawi han skriver at han sagtens kan finde ud af mails :)
Avatar billede kalp Novice
24. februar 2007 - 23:13 #4
Det gør han sørme også:S

Ja en gang imellem læser man ting som man selv vil forstå dem:o)
Avatar billede dr_chaos Nybegynder
24. februar 2007 - 23:24 #5
jeps :)
Avatar billede larsny Nybegynder
25. februar 2007 - 09:51 #6
Jeg kan ikke få den til at skrive noget ud...

min web.config fil ser sådan ud:
<configuration>
  <system.web>
      <httpRuntime maxRequestLength="2000000" />
      <customErrors mode="On" defaultRedirect="errorpage.aspx" />
      <globalization requestEncoding="ISO-8859-1" responseEncoding="ISO-8859-1" />
      <compilation debug="true">
      </compilation>
  </system.web>
</configuration>

På min errorpage.aspx har jeg så (for at teste) denne kode:
Response.Write(Server.GetLastError())
Avatar billede kalp Novice
25. februar 2007 - 10:01 #7
Du skal kalde tostring

Server.GetLastError.ToString();
Avatar billede larsny Nybegynder
25. februar 2007 - 10:07 #8
hmm jeg prøver denne (<%=Server.GetLastError.ToString()%>) som giver fejlen:
'System.Web.HttpServerUtility.GetLastError()' denotes a 'method' which is not valid in the given context

Jeg prøver så dette: (<%=Server.GetLastError().ToString()%>) og får fejlen:
Object reference not set to an instance of an object.
Avatar billede dr_chaos Nybegynder
25. februar 2007 - 10:11 #9
Det var mig som havde glemt at Server.getlasterror bruges i global.asax.
Her kan du fange din exception og sende en e-mail fra.
Prøv at kigge her:
www.developer.com/net/asp/article.php/961301+asp.net+Server.GetLastError&hl=da&ct=clnk&cd=1&gl=dk&client=firefox-a" target="_blank">http://64.233.183.104/search?q=cache:Y0Q4RcX6IYMJ:www.developer.com/net/asp/article.php/961301+asp.net+Server.GetLastError&hl=da&ct=clnk&cd=1&gl=dk&client=firefox-a
Avatar billede kalp Novice
25. februar 2007 - 10:15 #10
og ellers er de fleste håndteringsmuligheder illustreret her.
http://aspnetresources.com/articles/CustomErrorPages.aspx
Avatar billede larsny Nybegynder
27. februar 2007 - 20:06 #11
Jeg syntes ikke rigtigt jeg kan få det til at virke...

Har oprettet global.asax med dette indhold:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.Web.Mail"%>

<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
  //get reference to the source of the exception chain
  Exception ex = Server.GetLastError().GetBaseException();

    String errorMessage = "fejl";
   
    EventLog.WriteEntry("Test Web",
    errorMessage,
    EventLogEntryType.Error);

  //Insert optional email notification here...
 
  MailMessage oMsg = new MailMessage();
  oMsg.From = "xx@xx.xx";
  oMsg.To = "xx@xx.xx";
  oMsg.Subject = "Fejl på siden";
  oMsg.BodyFormat = MailFormat.Html;
  oMsg.Body = errorMessage;
  SmtpMail.SmtpServer = "relay.xx.x";
  SmtpMail.Send(oMsg);
 
  oMsg = null;
 
  Server.ClearError();
}
</script>

Kan i spotte fejlen?

jeg modtager aldrig mailen, og modtager ingen fejl...

Kan jeg på en eller anden måde teste det?
Avatar billede larsny Nybegynder
04. marts 2007 - 19:49 #12
så blev i stille :D
Avatar billede dr_chaos Nybegynder
04. marts 2007 - 19:58 #13
Så ikke at du havde skrevet.
Prøv at bruge breakpoints og se om du kommer ind i koden.
Avatar billede larsny Nybegynder
04. marts 2007 - 20:06 #14
hvordan det?

Jeg har ikke helt forstået hvordan den global.asax fungere..

Jeg ser det lidt som om det er noget der bliver kørt async ved siden af det andet?
Ved ikke om man kan debugge på en eller anden måde?
Avatar billede dr_chaos Nybegynder
06. marts 2007 - 09:24 #15
prøv at bruge
System.Diagnostics.Debug.WriteLine(errorMessage );
i global.asax.
Smid så
int i =0;
int j = 5/i;
i page_load på en side.
Avatar billede larsny Nybegynder
06. marts 2007 - 09:53 #16
hehe ahh nu fangede jeg de to linier der skal ind i page_load :D hehe

okay siden laver fejl nu da vi dividerer med 0...

Men i web.config er der følgende linie:
<customErrors mode="On" defaultRedirect="errorpage.aspx" />

Og jeg bliver bare sendt over til den side med det samme, og ingen fejl eller ekstra fejl.

Mangler jeg en opsætning et eller andet sted?
Avatar billede larsny Nybegynder
07. marts 2007 - 19:43 #17
glemt mig igen? :)
Avatar billede dr_chaos Nybegynder
07. marts 2007 - 19:56 #18
nej den gør det rigtige. Du bliver redirektet når en fejl opstår.
kan du se noget i output vinduet?
Avatar billede larsny Nybegynder
07. marts 2007 - 20:13 #19
jeg tror ikke der er sådan et vindue i Dreamweaver...

Jeg har nu også prøvet at korte global.asax filen ned til:

<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.Web.Mail"%>

<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
    Session["hehe"] = "yessir";
 
}
</script>

Og så prøve at printe den session ud på errorpage.aspx, men uden held...
Avatar billede dr_chaos Nybegynder
07. marts 2007 - 20:20 #20
hmm dreamweaver :(
Muligvis kommer du til din errorside før at du kommer ind i application error.
Avatar billede larsny Nybegynder
07. marts 2007 - 20:23 #21
Jeg har lige fundet ud af at med følgende kode, så skriver den noget i min eventlog:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.Web.Mail"%>

<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
    String Message = "\n\nURL:\n http://localhost/" + Request.Path
                                + "\n\nMESSAGE:\n " + Server.GetLastError().Message
                                + "\n\nSTACK TRACE:\n" + Server.GetLastError().StackTrace;

        // Create Event Log if it does not exist

        String LogName = "Application";
        if (!EventLog.SourceExists(LogName)) {
            EventLog.CreateEventSource(LogName, LogName);
        }

        // Insert into Event Log
        EventLog Log = new EventLog();
        Log.Source = LogName;
        Log.WriteEntry(Message, EventLogEntryType.Error);

}
</script>

Det der står i eventlog på serveren:


The description for Event ID ( 0 ) in Source ( Application ) cannot be found. The local computer may not have the necessary registry information or message DLL files to display messages from a remote computer. You may be able to use the /AUXSOURCE= flag to retrieve this description; see Help and Support for details. The following information is part of the event:

URL:
http://localhost//test.aspx

MESSAGE:
Exception of type System.Web.HttpUnhandledException was thrown.

STACK TRACE:
  at System.Web.UI.Page.HandleError(Exception e)
  at System.Web.UI.Page.ProcessRequestMain()
  at System.Web.UI.Page.ProcessRequest()
  at System.Web.UI.Page.ProcessRequest(HttpContext context)
  at System.Web.CallHandlerExecutionStep.System.Web.HttpApplication+IExecutionStep.Execute()
  at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously).
Avatar billede dr_chaos Nybegynder
07. marts 2007 - 20:27 #22
jamen så gør den det den skal.
Avatar billede larsny Nybegynder
07. marts 2007 - 20:45 #23
vuhu jeg fandt ud af hvad fejlen var...
der hvor jeg laver beskeden står der "\n" i nogle af linierne... den er ikke så glad for \n :D great hehe

Til dem der falder over dette eksempel, ser min kode nu sådan ud og virker:
<%@ Application Language="C#" %>
<%@ Import Namespace="System.Diagnostics" %>
<%@ Import Namespace="System.Web.Mail"%>

<script language="C#" runat="server">
void Application_Error(object sender, EventArgs e)
{
    Exception ex = Server.GetLastError().GetBaseException();
   
    String Message = "MESSAGE: "+ex.Message+"<br />"
        +"SOURCE: "+ex.Source+"<br />"
        +"FORM: "+Request.Form.ToString()+"<br />"
        +"QUERYSTRING: "+Request.QueryString.ToString()+"<br />"
        +"TARGETSITE: "+ex.TargetSite+"<br />"
        +"STACKTRACE: "+ex.StackTrace;
   
    MailMessage oMsg = new MailMessage();
    oMsg.From = "XX";
    oMsg.To = "XX";
    oMsg.Subject = "XX";
    oMsg.BodyFormat = MailFormat.Html;
    oMsg.Body = Message;
    SmtpMail.SmtpServer = "XX";
    SmtpMail.Send(oMsg);
   
    oMsg = null;
}
</script>

dr_chaos smid et svar :)
Avatar billede dr_chaos Nybegynder
07. marts 2007 - 21:00 #24
svar :)
Avatar billede larsny Nybegynder
07. marts 2007 - 21:03 #25
fedt at backslash skulle være det der ødelagde det hele hehe... feeling so stupid!!! :D
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester