C# - Request property, avagy a HttpRequest osztály

Page osztály 3. rész

forráskód letöltése
A HttpRequest osztály tartalmazza minden webes kérés adatát. Ezek alapján tájékozódhatunk például arról, hogy a kérést küldő felhasználó milyen ország területén van, milyen a nyelve. Ezt felhasználva például készíthetünk olyan web oldalt, mely rögtön a felhasználó nyelvén küldi az adatokat, így neki nem kell kiválasztania, hogy web oldalainkat milyen nyelven szeretné látni.
Megtudhatjuk többek között azt is, hogy böngészőjének, operációs rendszerének mi a típusa, verziószáma, vagy akár azt, hogy milyen IP címről kaptuk a kérést.
Ezen kívül még számtalan fontos tulajdonságra fényt deríthetünk a HttpRequest osztály használatával.
Minden WebForm-on létezik tehát egy Request változó, mely HttpRequest típusú. Ezen keresztül rögtön lekérdezhetjük a szükséges adatokat.
Adott például a HttpRequest osztályban egy Browser property, mely HttpBrowserCapabilities típusú. Ennek számos property-e, mind a felhasználó böngészőjével kapcsolatos információkat adja meg számunkra. Készítünk egy olyan kis algoritmust, mellyel a Browser property összes property-jének az értékét ki tudjuk listázni egy ListBox kontrolba, így nem kell azokat egyesével felsorolva elérnünk, vagyis nem kell annyi forráskód sort begépelnünk. Ez a módszer más esetekben is nagyon hasznos.
Első lépésként szükségünk lesz a Browser property típusára Type osztály típusban. Ehhez annak GetType függvényét használjuk.
      Type t = Request.Browser.GetType();
Ezt követően már indíthatunk is egy foreach ciklust, mely az adott típus összes property-jén végigmegy. A Type osztály GetProperties függvénye egy olyan tömböt ad vissza, melynek minden eleme egy-egy property-nek felel meg és PropertyInfo típusban kerül tárolásra.
      foreach(PropertyInfo p in t.GetProperties())
      {
        try
        {
Ezt felhasználva már könnyen elérhetjük az adott property nevét és annak aktuális értékét, melyet csak meg kell jelenítenünk a ListBox-ban.
          ListBox1.Items.Add(p.Name + ": " + p.GetValue(Request.Browser, null).ToString());        
        }
        catch
        {
        }
      }
A HttpRequest osztály AcceptTypes property-je egy tömböt ad vissza, melynek minden eleme egy sztring. Ebben egy olyan listát kapunk, melyből megtudhatjuk, hogy a kérést küldő kliens milyen típusú adatok megjelenítésére képes. Nézzünk néhány példát: image/gif esetén a kliens képes GIF típusú képek megjelenítésére. Az application/msword érték esetén a kliens képes MS Word dokumentumok megjelenítésére és a kérés eredményeképp, akár ezt is küldhetünk a számára.
      foreach(string s in Request.AcceptTypes)
      {
        Label4.Text = Label4.Text + s + "; ";
      }                 
A kliens biztonsági igazolványainak információit megkaphatjuk a ClientCertificate property-n keresztül, mely HttpClientCertificate típusú. Ez szintén számos property-t tartalmaz, így a listázására a fent ismertetett módszert alkalmazzuk.
A ContentEncoding property-ből megtudhatjuk a kliens aktuális karakterkészletét Encoding osztály típusban. Ebből meghatározhatjuk, hogy a kérésre milyen formátumban kell válaszolnunk.
A kliens által küldött adatok mennyiségét bájtban a ContentLength property árulja el, míg a ContentType property a beérkező kérés típusát írja le.
A UserAgent property sztringjéből több információt is megtudhatunk. Hasonlóan a Browser property-hez innen is kideríthetjük a kliens böngészőjének típusát, verziószámát, a használt operációs rendszerének típusát és verziószámát.
A UserHostAddress property-ben kapott értékből megállapíthatjuk a kliens IP címét, így például bizonyos funkciókat letilthatunk vagy engedélyezhetünk attól függően, hogy honnan érkezett a kérés. Ez a paraméter igen hasznos abban az esetben, ha a web site-unk rendszeradminisztrációs feladatai is elérhetők web oldalakról. Ebben az esetben célszerű csak saját IP címünket kiszolgálni, így más nem férhet a rendszerünkhöz.
A UserHostName kötődik a UserHostAddress property értékéhez. Amennyiben az ott tárolt IP címhez sikerül DNS nevet is társítani, úgy annak értékét láthatjuk itt, ellenkező esetben itt az IP cím jelenik meg.
A UserLanguages property-ből tudhatjuk meg, hogy a felhasználó melyik nyelvterületről származik. Ezt felhasználva könnyen elágaztathatjuk a web oldalainkat nyelvterület szerint, így a felhasználónak nem is kell megadnia, hogy melyik nyelvet használná web lapjaink olvasásához.
A ServerVariables property egy NameValueCollection típusú osztályt képvisel, melyben a web szerverünk változói és azok értékei érhetők el.
Az Url property megadja az aktuális kérésnek a teljes URL-jét, míg az UrlReferrer property akkor ad vissza egy URL-t, ha a kliens egy előző oldalunkról linkelt át erre. Ekkor az UrlReferrer property azt a címet adja, amelyről a felhasználó az aktuálisra került.
A nyers URL címet a RawUrl property szolgáltatja. Ekkor egy http://localhost/Page03/WebForm1.aspx kérés esetén a /Page03/WebForm1.aspx sztringet kapjuk vissza.
Az ApplicaitonPath property az alkalmazásunk web szerveren lévő virtuális könyvtárának nevét adja meg. Ekkor egy http://localhost/Page03/WebForm1.aspx kérés esetén a /Page03 sztringet kapjuk vissza.
A Path property az aktuális kérés virtuális útvonalát adja meg. Ekkor egy http://localhost/Page03/WebForm1.aspx kérés esetén a /Page03/WebForm1.aspx sztringet kapjuk vissza.
A PathInfo property az aktuális kérés további elérési útját adja meg. Ekkor egy http://localhost/Page03/WebForm1.aspx/teszt kérés esetén a /teszt sztringet kapjuk vissza.
A PhysicalApplicationPath szolgáltatja a kérés virtuális könyvtárának fizikai elérési útvonalát, míg a PhysicalPath property-ből megtudhatjuk a kérés teljes, fizikai elérési útvonalát.
A FilePath property adja a kérés virtuális útvonalát.
A RequestType property szolgáltatja, hogy kérés milyen típusú: GET, vagy POST.
A QueryString property egy olyan listát szolgáltat, melyből megtudhatjuk az aktuális kérés paramétereit és azokhoz rendelt értékeket. A következő kérés esetén: http://localhost/Page03/WebForm1.aspx?param1=150¶m2=abc, a param1 és param2 kerül a QueryString property-be az értékükkel együtt.
Ha az IsAuthenticated property igaz, akkora felhasználó azonosítva lett.
Ha az IsSecureConnection property igaz, akkor a kapcsolat titkos csatornán keresztül történik (HTTPS).
A HttpMethod property tartalmazza az adatátvitel metódusát, mely lehet, GET, POST, illetve HEAD.
A kérés fejlécének adatait NameValueCollection típusban a Headers property tartalmazza, míg a Form property ugyanilyen típusban a Web Form-unkon megadott adatokat tárolja.
Adott egy ParamsProperty property is, mely a QueryString, Form, ServerVariables és a Cookies property-k tartalmát tartalmazza egyetlen NameValueCollection osztályban.
A Files property HttpFileCollection típusú osztályban tárolja a kliens által feltöltött állományok adatait. Ennek csak akkor van valós tartalma, ha a HTTP kérés ContentType property-je multipart/form-data értéket tartalmaz.
A Cookies property-re a sorozatunk egy későbbi részében részletesen visszatérünk, így ennek lehetőségeit most nem tárgyaljuk.
Adott egy InputStream property, melyen keresztül egy Stream osztályban elérhetjük az adott kéréshez tartozó HTTP adatokat. Ezt az alábbi módszerrel kiírhatjuk például egy állományba.
    private void Button1_Click(object sender, System.EventArgs e)
    {       
      Stream st = Request.InputStream;
      byte[] b = new byte[st.Length];
      st.Read(b, 0, Convert.ToInt32(st.Length));
      FileStream fs = new FileStream(Server.MapPath("InputStream.txt"), FileMode.Create);
      fs.Write(b, 0, Convert.ToInt32(st.Length));
    }
Lehetőségünk van az adatok állományba írására a SaveAs függvény használatával is. Itt első paraméterként az állomány nevét, míg másodikként egy logikai értéket kell megadnunk, amely szabályozza, hogy a fejléc adatok is mentésre kerüljenek-e vagy sem.
    private void Button2_Click(object sender, System.EventArgs e)
    {
      Request.SaveAs(Server.MapPath("SaveAs.txt"), CheckBox1.Checked);
    }

Page osztály cikksorozat