2013-06-08 20 views
8

HTTPハンドラでHTTP POST文字列をリッスンして処理する必要があります。私はハンドラで試してみました何HTTPハンドラでHTTP POSTを受信して​​いますか?

string test = "charset = UTF-8 & param1 = val1 & param2 = val2 & param3 = val3 & param4 = val4; 
byte[] data = Encoding.UTF8.GetBytes(test); 
PostData("http://localhost:53117/Handler.ashx", data); 

がある - -

public void ProcessRequest(HttpContext context) 
    { 
     var value1 = context.Request["param1"]; 
    } 

しかし、そのヌル

は、以下のハンドラに文字列を投稿するためのコードです。 Handlerでパラメータ値を聞いて取得するにはどうすればよいですか?

答えて

23

にあなたは、代わりにあなたは、いくつかのカスタムプロトコルを再発明しているように見えるの標準的な要求エンコーディングのいずれかを使用してしていないようですので、あなたが頼ることができませんサーバーASP.NETはこの要求を解析することができます。あなたはのInputStreamから直接値を読み取る必要があります。一方で、あなたがapplication/x-www-form-urlencodedなどのいくつかの標準的な要求エンコーディングを使用している場合

public void ProcessRequest(HttpContext context) 
{ 
    using (var reader = new StreamReader(context.Request.InputStream)) 
    { 
     // This will equal to "charset = UTF-8 & param1 = val1 & param2 = val2 & param3 = val3 & param4 = val4" 
     string values = reader.ReadToEnd(); 
    } 
} 

あなたはいつものようにパラメータを読み取ることができます。あなたが値を読み取ることができ、サーバー上で今

using (var client = new WebClient()) 
{ 
    var values = new NameValueCollection 
    { 
     { "param1", "value1" }, 
     { "param2", "value2" }, 
     { "param3", "value3" }, 
     { "param4", "value4" }, 
    }; 
    byte[] result = client.UploadValues(values); 
} 

:あなたはWebClientを使用することができ、そのような要求を送信するために

POST /Handler.ashx HTTP/1.1 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 47 
Connection: close 

param1=val1&param2=val2&param3=val3&param4=val4 

はここで、このような要求ペイロードは、次のようになります方法ですそのように:

public void ProcessRequest(HttpContext context) 
{ 
    var value1 = context.Request["param1"]; 
    var value2 = context.Request["param2"]; 
    ... 
} 
+0

ありがとう!私はフロントエンドの画像リサイズ機能にAngularJSを使用していて、JSONオブジェクト(名前、寸法、画像データ自体(base64)など)のバッチ(配列)をサーバーにアップロードしています。 ペイロードの読み込みに問題がありました(パラメータを追加すると、 "data:"が見つかりませんでした/サーバサイドで読み込まれました)。あなた: – LittleTiger

+0

@ダリンこの質問で私を助けることができると思いますか?http://goo.gl/qiOdmT – Axel

2

変更

var value1 = context.Request["param1"]; 

var value1 = context.Request.Form["param1"]; 
+0

まだnullです。 – Sandy

3

実際には:

context.Request.Params["param1"]; 
関連する問題