Introduktion till felsökning av ASP.NET webbplatser (Razor)

av Tom FitzMacken

I den här artikeln beskrivs olika sätt att felsöka sidor på en ASP.NET webbsida (Razor). Felsökning är processen för att hitta och åtgärda fel på kodsidorna.

Det här lär du dig:

  • Så här visar du information som hjälper till att analysera och felsöka sidor.
  • Så här använder du felsökningsverktyg i Visual Studio.

Det här är de ASP.NET funktioner som introduceras i artikeln:

  • Hjälparen ServerInfo.
  • ObjectInfo hjälpprogram.

Programvaruversioner

  • ASP.NET webbsidor (Razor) 3
  • Visual Studio 2013

Den här handledningen fungerar också med ASP.NET Webbsidor 2. Du kan använda WebMatrix 3, men det integrerade felsökningsprogrammet stöds inte.

En viktig aspekt av felsökningsfel och problem i koden är att undvika dem i första hand. Du kan göra det genom att placera delar av koden som sannolikt orsakar fel i try/catch block. Mer information finns i avsnittet om hantering av fel i Introduktion till ASP.NET webbprogrammering med hjälp av Razor-syntaxen.

Hjälpen ServerInfo är ett diagnostikverktyg som ger dig en översikt över information om webbservermiljön som är värd för sidan. Den visar också information om HTTP-begäranden som skickas när en webbläsare begär sidan. Hjälpen ServerInfo visar den aktuella användaridentiteten, vilken typ av webbläsare som gjorde begäran och så vidare. Den här typen av information kan hjälpa dig att felsöka vanliga problem.

  1. Skapa en ny webbsida med namnet ServerInfo.cshtml.

  2. I slutet av sidan, precis före den avslutande </body> taggen, lägger du till @ServerInfo.GetHtml():

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
       @ServerInfo.GetHtml()
        </body>
    </html>
    

    Du kan lägga till ServerInfo koden var som helst på sidan. Men om du lägger till det i slutet hålls utdata åtskilda från det andra sidinnehållet, vilket gör det lättare att läsa.

    Anmärkning

    Viktigt Du bör ta bort eventuell diagnostikkod från dina webbsidor innan du flyttar webbsidor till en produktionsserver. Detta gäller för hjälpen ServerInfo och andra diagnostiktekniker i den här artikeln som omfattar att lägga till kod på en sida. Du vill inte att webbplatsbesökare ska se information om ditt servernamn, användarnamn, sökvägar på servern och liknande information, eftersom den här typen av information kan vara användbar för personer med skadlig avsikt.

  3. Spara sidan och kör den i en webbläsare.

    Felsökning-1

    Hjälpen ServerInfo visar fyra informationstabeller på sidan:

    • Serverkonfiguration. Det här avsnittet innehåller information om värdwebbservern, inklusive datornamn, versionen av ASP.NET du kör, domännamnet och servertiden.

    • ASP.NET Server Variables. Det här avsnittet innehåller information om de många HTTP-protokollinformationen (kallas HTTP-variabler) och värden som ingår i varje webbsidebegäran.

    • HTTP-körningsinformation. Det här avsnittet innehåller information om den version av Microsoft .NET Framework som din webbsida körs under, sökvägen, information om cachen och så vidare. (Som du lärde dig i Introduktion till ASP.NET webbprogrammering med hjälp av Razor-syntaxen bygger ASP.NET webbsidor som använder Razor-syntaxen på Microsofts ASP.NET webbserverteknik, som i sig bygger på ett omfattande programutvecklingsbibliotek som kallas .NET Framework.)

    • Miljövariabler. Det här avsnittet innehåller en lista över alla lokala miljövariabler och deras värden på webbservern.

      En fullständig beskrivning av all server- och begärandeinformation ligger utanför omfånget för den här artikeln, men du kan se att hjälpen ServerInfo returnerar mycket diagnostikinformation. Mer information om de värden som ServerInfo returneras finns i Identifierade miljövariabler på Microsoft TechNet-webbplatsen och IIS Server-variabler på MSDN-webbplatsen.

Bädda in utdatauttryck för att visa sidvärden

Ett annat sätt att se vad som händer i koden är att bädda in utdatauttryck på sidan. Som du vet kan du direkt mata ut värdet för en variabel genom att lägga till något som liknar @myVariable eller @(subTotal * 12) på sidan. För felsökning kan du placera utdatauttrycken på strategiska punkter i koden. På så sätt kan du se värdet för nyckelvariabler eller resultatet av beräkningar när sidan körs. När du är klar med felsökningen kan du ta bort uttrycken eller kommentera ut dem. Den här proceduren illustrerar ett typiskt sätt att använda inbäddade uttryck för att felsöka en sida.

  1. Skapa en ny WebMatrix-sida med namnet OutputExpression.cshtml.

  2. Ersätt sidinnehållet med följande:

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>   
    
        @{
            var weekday = DateTime.Now.DayOfWeek;
            // As a test, add 1 day to the current weekday.
            if(weekday.ToString() != "Saturday") {
                // If weekday is not Saturday, simply add one day.
                weekday = weekday + 1; 
            }
            else {
                // If weekday is Saturday, reset the day to 0, or Sunday.
                weekday = 0; 
            }
            // Convert weekday to a string value for the switch statement.
            var weekdayText = weekday.ToString(); 
    
            var greeting = "";
            
            switch(weekdayText) 
            { 
                case "Monday":
                    greeting = "Ok, it's a marvelous Monday."; 
                    break; 
                case "Tuesday":
                    greeting = "It's a tremendous Tuesday.";
                    break; 
                case "Wednesday":
                    greeting = "Wild Wednesday is here!";
                    break; 
                case "Thursday":
                    greeting = "All right, it's thrifty Thursday.";
                    break;
                case "Friday":
                    greeting = "It's finally Friday!";
                    break;
                case "Saturday":
                    greeting = "Another slow Saturday is here.";
                    break;
                case "Sunday":
                    greeting = "The best day of all: serene Sunday.";
                    break;
                default:
                    break; 
            }
        }
        
        <h2>@greeting</h2>
    
        </body>
    </html>
    

    I exemplet används en switch -instruktion för att kontrollera värdet för variabeln weekday och sedan visa ett annat utdatameddelande beroende på vilken dag i veckan den är. I exemplet if ändrar blocket i det första kodblocket godtyckligt veckodagen genom att lägga till en dag till det aktuella veckodagsvärdet. Det här är ett fel som introduceras i illustrationssyfte.

  3. Spara sidan och kör den i en webbläsare.

    Sidan visar meddelandet för fel dag i veckan. Oavsett vilken dag i veckan det faktiskt är, kommer du att se meddelandet för en dag senare. Även om du i det här fallet vet varför meddelandet är inaktiverat (eftersom koden avsiktligt anger det felaktiga dagvärdet) är det i själva verket ofta svårt att veta var saker går fel i koden. För att felsöka måste du ta reda på vad som händer med värdet för viktiga objekt och variabler som weekday.

  4. Lägg till utdatauttryck genom att infoga @weekday på de två ställen som anges i kommentarerna i koden. Dessa utdatauttryck visar värdena för variabeln vid den tidpunkten i kodkörningen.

    var weekday = DateTime.Now.DayOfWeek;
    // DEBUG: Display the initial value of weekday. 
    @weekday
    
    // As a test, add 1 day to the current weekday.
    if(weekday.ToString() != "Saturday") {
        // If weekday is not Saturday, simply add one day.
        weekday = weekday + 1; 
    }
    else {
        // If weekday is Saturday, reset the day to 0, or Sunday.
        weekday = 0; 
    }
    
    // DEBUG: Display the updated test value of weekday.
    @weekday
    
    // Convert weekday to a string value for the switch statement.
    var weekdayText = weekday.ToString();
    
  5. Spara och kör sidan i en webbläsare.

    Sidan visar den verkliga veckodagen först, sedan den uppdaterade veckodagen som är resultatet av att lägga till en dag och sedan det resulterande meddelandet från -instruktionen switch . ** Utdata från de två variabeluttrycken (@weekday) saknar mellanslag mellan dagarna eftersom du inte lade till några HTML-taggar <p> i utdata, uttrycken är endast för testning.

    Felsökning-2

    Nu kan du se var felet finns. När du först visar variabeln weekday i koden visas rätt dag. När du visar den för andra gången, efter if-blocket i koden, är dagen förskjuten med en dag. Så att du vet att något har hänt mellan den första och andra förekomsten av veckodagsvariabeln. Om det här var en riktig bugg skulle den här typen av metod hjälpa dig att begränsa platsen för den kod som orsakar problemet.

  6. Åtgärda koden på sidan genom att ta bort de två utdatauttrycken som du har lagt till och ta bort koden som ändrar veckodagen. Det återstående, fullständiga kodblocket ser ut som i följande exempel:

    @{
        var weekday = DateTime.Now.DayOfWeek;
        var weekdayText = weekday.ToString(); 
    
        var greeting = "";
            
        switch(weekdayText) 
        { 
            case "Monday":
                greeting = "Ok, it's a marvelous Monday."; 
                break; 
            case "Tuesday":
                greeting = "It's a tremendous Tuesday.";
                break; 
            case "Wednesday":
                greeting = "Wild Wednesday is here!";
                break; 
            case "Thursday":
                greeting = "All right, it's thrifty Thursday.";
                break;
            case "Friday":
                greeting = "It's finally Friday!";
                break;
            case "Saturday":
                greeting = "Another slow Saturday is here.";
                break;
            case "Sunday":
                greeting = "The best day of all: serene Sunday.";
                break;
            default:
                break; 
        }
    }
    
  7. Kör sidan i en webbläsare. Den här gången visas rätt meddelande för den faktiska veckodagen.

Använda ObjectInfo-hjälpen för att visa objektvärden

Hjälpen ObjectInfo visar typen och värdet för varje objekt som du skickar till det. Du kan använda den för att visa värdet för variabler och objekt i koden (som du gjorde med utdatauttryck i föregående exempel), plus att du kan se information om datatyp om objektet.

  1. Öppna filen OutputExpression.cshtml som du skapade tidigare.

  2. Ersätt all kod på sidan med följande kodblock:

    <!DOCTYPE html>
    <html>
        <head>
            <title></title>
        </head>
        <body>
        @{
          var weekday = DateTime.Now.DayOfWeek;
          @ObjectInfo.Print(weekday)
          var weekdayText = weekday.ToString(); 
      
          var greeting = "";
      
          switch(weekdayText) 
          { 
              case "Monday":
                  greeting = "Ok, it's a marvelous Monday."; 
                  break; 
              case "Tuesday":
                  greeting = "It's a tremendous Tuesday.";
                  break; 
              case "Wednesday":
                  greeting = "Wild Wednesday is here!";
                  break; 
              case "Thursday":
                  greeting = "All right, it's thrifty Thursday.";
                  break;
              case "Friday":
                  greeting = "It's finally Friday!";
                  break;
               case "Saturday":
                  greeting = "Another slow Saturday is here.";
                  break;
               case "Sunday":
                  greeting = "The best day of all: serene Sunday.";
                  break;
              default:
                  break; 
          }
        }
        @ObjectInfo.Print(greeting)
        <h2>@greeting</h2>
    
        </body>
    </html>
    
  3. Spara och kör sidan i en webbläsare.

    Felsökning-4

    I det här exemplet visar hjälpen ObjectInfo två objekt:

    • Typ För den första variabeln är typen DayOfWeek. För den andra variabeln är typen String.

    • Värdet. I det här fallet, eftersom du redan visar värdet för hälsningsvariabeln på sidan, visas värdet igen när du skickar variabeln till ObjectInfo.

      För mer komplexa objekt kan hjälpen ObjectInfo visa mer information – i princip kan den visa typer och värden för alla ett objekts egenskaper.

Använda felsökningsverktyg i Visual Studio

Om du vill ha en mer omfattande felsökningsupplevelse använder du Visual Studio. Med Visual Studio kan du ange en brytpunkt i koden på den rad som du vill inspektera.

ange brytpunkt

När du testar webbplatsen, stoppas exekveringskoden vid brytpunkten.

nå brytpunktet

Du kan undersöka variablernas aktuella värden och gå igenom koden rad för rad.

se värden

Information om hur du använder det integrerade felsökningsprogrammet i Visual Studio för att felsöka ASP.NET Razor-sidor finns i Programmering ASP.NET webbsidor (Razor) med Visual Studio.

Ytterligare resurser