2013-07-23 7 views
26

これは私を狂ってしまいます。私はASP.NET MVCを使用しています。私は別のサーバー(私の制御下ではない)によって呼び出されるコールバックURLとして機能するHttpPostアクションを持つコントローラを持っています。 WebAPIやModel Bindingを使用せずにJSONを動的に読み込みたいURLには、クエリ文字列パラメータも渡されます。私が使用して掲載入力を読んでみましたASP.NET MVCは未処理のJSONのポストデータを読み込みます

http://domain.com/callback?secret=1234

[HttpPost] 
public ActionResult Callback(String secret) 
{ 
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd(); 

    // ... 
} 

はしかし "jsonData" は常にnullまたは空の

コールバックURLは次のようになります。

投稿された入力を取得してJsonFxに貼り付けて、コンテンツに動的にアクセスできるようにしたいだけです。どのようにこれを行うに最も簡単な方法で任意のアイデア?

UPDATE

私は、上記の(jsonDataがnullまたは空になります)動作していませんが、以下は、私はなけなしのオプションを設定する場合、私は持っている以下の...

を発見しました呼び出し側のサーバ上で、「秘密」のクエリ文字列パラメータを省略することができます。これは、私のサーバではないため、私がそのことでできることです。この場合、jsonDataは正しいがJSON文字列を掲載しているでしょう:

[HttpPost] 
public ActionResult Callback(/* String secret */) 
{ 
    String jsonData = new StreamReader(this.Request.InputStream).ReadToEnd(); 

    // ... 
} 

これは回避することは非常にイライラさせられると私は、クエリ文字列の両方を受け入れるための簡単な方法を知っていて、標準のMVCでJSONデータを掲載していませんコントローラ。

GET、フォームPOST、JSON POST、JSON POST、クエリ文字列などのさまざまなデータをさまざまなサードパーティのサーバーから受け取るアクションメソッドを持つコールバックコントローラがあります。これらはマーチャント型のコールバックで、情報を伝達するための形式やメソッドを制御できません。コールバックを受け入れてそこにあるべき情報を処理するだけです。

"JSON POST w/a Query String"の場合を除いて、コントローラのすべてが正常に動作します。

これは、標準のASP.NET MVCコントローラの欠点と思われる(少なくとも私にとって)。 ???

誰にでも標準のASP.NET MVCコントローラで使用できるこのソリューションを提案できますか?

あなたの最初のアプローチは、あなたが考慮に入れる場合はASP.NET MVCモデルバインディングという事実は、あなたがそれを巻き戻す必要がありますので、すでに、ストリームを読んで持って動作するはず
+0

投稿すると、すべてのjsonが「jsonData」に等しくなります。例えば'{{jsonData:[{...すべてのjson stuff ...}}}];'これはテストしていませんが、うまくいくかもしれません。 – jzm

+0

私は情報を投稿するサーバを制御できません。私は上記のアップデートを追加しました。 – lantram

+0

なぜ名前 'jsonData'を選択しますか?、jsonデータが別の名前で来ている可能性があります。名前のFormCollectionを検査してみてください。 – tkt986

答えて

50

[HttpPost] 
public ActionResult Callback(string secret) 
{ 
    Request.InputStream.Seek(0, SeekOrigin.Begin); 
    string jsonData = new StreamReader(Request.InputStream).ReadToEnd(); 

    // ... 
} 
+0

恐ろしい!どうもありがとうございました。私は単純な解決策がなければならないことを知っていました。 – lantram

+0

これは動作しますが、このことについてどんな考えhttp://stackoverflow.com/questions/21441571/get-post-request-parameters-in-custom-authorizeattributeありません – PUG

0

は読む前にpositionZeroにリセットストリーム。 Request.InputStream.Position = 0

関連する問題