Request
HTTP
Børre Stenseth
Moduler>Websites>Inspeksjon

Inspeksjon

Hva
Inspeksjon av HTTP-kommunikasjon

Ved å inspisere Request-objektet i klassen Page kan vi finne ut hvordan data transporteres til tjeneren. Vi lager et enkelt eksempel som lager en slik rapport.

Vi lager en enkel vevside med et tekstfelt, en knapp og et par placeholdere for å ha et sted å rapportere. Siden, Default.aspx, er slik:

<%@ Page Language="C#" AutoEventWireup="true"  
         CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
                     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server" method="post">
    <div>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" 
                    OnClick="Button1_Click" />
        <br />
        <br />
        <br />
        <asp:Label ID="LabelHead" runat="server"  Text="Header"></asp:Label>
        <br />
        <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
        <br />
        <br />
        <br />
        <asp:Label ID="LabelVals" runat="server" Text="Content"></asp:Label>
        <br />
        <asp:PlaceHolder ID="PlaceHolder2" runat="server"></asp:PlaceHolder>
    </div>
    </form>
</body>
</html>

Du kan eksperimente med method-attributten i form-elementet til get eller post.

På tjenersiden plukker vi opp en postback slik:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Specialized;
public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            // show headers
            dumpCollection(Request.Headers, PlaceHolder1);
            // show which method
            LabelVals.Text = Request.HttpMethod;

            if (Request.HttpMethod.ToLower().CompareTo("get") == 0)
            {
                // experiment with other collections
                dumpCollection(Request.Params, PlaceHolder2);
            }
            else if (Request.HttpMethod.ToLower().CompareTo("post") == 0)
            {
                // experiment with other collections
                dumpCollection(Request.Params, PlaceHolder2);
            }
        }
    }
    protected void dumpCollection(NameValueCollection coll,
        PlaceHolder place)
    {
        HtmlGenericControl tab =
            new HtmlGenericControl("table");
        String[] keys = coll.AllKeys;
        String result = "";
        for (int ix = 0; ix < keys.Length; ix++)
        {
            result += String.Format(@"<tr>
<td valign=""top"">{0}</td>
<td valign=""top"">{1}</td>
</tr>",
                keys[ix], coll[keys[ix]]);
        }
        tab.InnerHtml = result;
        place.Controls.Add(tab);
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        // whatever you want to test
    }
}

Du kan bruke dette eksemepelet som en testbenk for å test ut andre metoder i Request-objektet.

Referanser
Prosjekt:
https://svn.hiof.no/svn/psource/Csharpsites/site2
Vedlikehold

B.Stenseth, februar 2007

(Velkommen) Moduler>Websites>Inspeksjon (Webhistogram)