ちょっとしたTips:あるいは「.NETを無理やりCGIっぽく扱う方法」

データの取得各種

CGIに熟練して「その言語には慣れていない」人がしょっぱなで引っかかるのが大抵ここです。結構、言語ごとの癖が強いんですよね。
とりあえず、いかにざっくりと各データの取り方をメモ程度に記します。
本気でメモ程度なので、ある程度ちゃんと下調べ&テストを忘れずにどうぞ。

POST

string[] ret = System.Web.HttpContext.Current.Request.Form.GetValues(key);

GET

string[] ret = System.Web.HttpContext.Current.Request.QueryString.GetValues(key);

Cookie:name=valueのパターンの場合

System.Web.HttpContext nc = System.Web.HttpContext.Current;
HttpCookie co = nc.Request.Cookies[key];
if (null != co) {
return co.Value;
}

PATH_INFO

string s = System.Web.HttpContext.Current.Request.ServerVariables["PATH_INFO"];
注:UNIX系で認識されているPATH_INFOとは「違う」ものを取得してくるので注意が必要です。
多くのUNIX系においては、例えば
http://www.foojp/index.cgi/aaa
とした場合に"aaa"が取得されることを予想しています。しかしASP.NETにおいて同様に
http://www.foojp/index.aspx/aaa
とした場合、"/index.aspx/aaa"と、「プログラム名を含むパス一式」が渡ってくるようです(IIS 5系)。
これは、IISの[仕様|バグ]のようですので、ご利用の際には計画的に。…使わないのが一番かもしれません。

出力の仕方:通常&各ルーチンにすっ飛ばす場合

本稿における出力の基本は「HTML ボディ部分を全て自力で組み立てて出力する」です。
で、この方式において便利なのは Response.Write メソッドです。…が、これは実際に直接書けるのはPage_Loadメソッド内などの限定空間になるので、できれば「どこでもいける」完全な名前を把握しておくと便利です。
完全な修飾名は「System.Web.HttpContext.Current.Response.Write( 出力文字列をstringで )」になります。なので、こいつに置換したHTMLを全部渡してやれば、出力ができます。
あ〜。Perlな人やC++な人は、「System.Web.HttpContext.Current.Response.Write」が「print」とか「printf」とかと一緒だ、程度に思ってもらえればよいです。

Cookieの仕様

んっと。ぢつはASP.NETは2種類のCookie実装があるです。…いやまぁ別に、結局はCOOKIE_STRINGの文字にはなるのですが。
通常、Cookieの文字列ってぇのは
name=value
という形式の繰り返しになるのですが。ASP.NETでは、もうひとつ、以下のイメージのデータ取り扱いをサポートしています。
[category]
name=value
んっと。特にWindowsのiniファイルとかでわりとおなじみの形式か、と。これは、実際のCOOKIE_STRINGレベルでは
category=name=value
となっています。
純粋にASP.NET内のみで扱う分にはよいのですが、「Cookie文字列を他製品と連動させながら」使うようなケース(ロードバランサーがCookie文字列から判断して1次処理をする、とか)の場合に若干問題が発生することがあるので、覚えておいて損はないでしょう。
ちなみに、通常CGI屋さんが認識している
name=value
の形式でCookieを発行する場合は

HttpCookie cog = new HttpCookie("test222");
cog.Value = "value";

というコーディングがよろしいです。ASP.NET特有の形式のほうが便利な場合は

HttpCookie cog = new HttpCookie("test");
cog.Values.Add("name", "value");

という形式にするとGoodです。

戻る 
Copyright 2005 M-Fr Net All Right Reserved
E-Mail:info@m-fr.net