2009-05-05 9 views
1

.NET 3.5でカスタム404 CMSシステムを構築しましたが、データを転記するのはIIS 5.1および6.0でローカルに機能しますが、本番IIS 6.0サーバーでは機能しません。私はIIS 6.0のサイト設定項目を項目ごとに比較しました。これらはほとんど同じで、唯一の違いは問題ありません。IIS 6.0のカスタム404ページから送信するとPOSTデータが失われるのはなぜですか?

私はフォームがそれぞれ "http://domain/folder/folder/page.resource"にPOSTされていることを確認しました(コードはSVNにあります)。また、送信時にリダイレクトが発生しないことを確認しました。サーバー別のデバッグ情報:

IIS 5.1 (my computer, works): 
ServerVariables["REQUEST_METHOD"]="POST" 
Request.TotalBytes = 1600 
Request.QueryString.Count = 1 (NOTE: contains "404;http://domain:80/folder/folder/page.resource" in each case) 
Request.Form.Count = 109 

IIS 6.0 (test server, works): 
ServerVariables["REQUEST_METHOD"]="GET" (NOTE: IIS 6.0 reads this as "GET" instead of "POST") 
Request.TotalBytes = 1600 
Request.QueryString.Count = 1 
Request.Form.Count = 109 

IIS 6.0 (production server, does not work): 
ServerVariables["REQUEST_METHOD"]="GET" 
Request.TotalBytes = 0 (NOTE: should be ~1600) 
Request.QueryString.Count = 1 
Request.Form.Count = 0 (NOTE: should be 109) 

誰にでもアイデアはありますか?私はPOSTデータがIIS 7.0で404ページではなく、6.0では送信されていないことを読んでいます。 Iセットアップ、中.resource拡張子IIS 5.1の場合のみ

<form id="GolfRegistration" name="GolfRegistration" method="POST" action="/folder/folder/page.resource" onSubmit="return CalculateAmount();"> 
<input type="button" value="Submit" onClick="if(ValidateInput()){submit(GolfRegistration);}"> 
</form> 

「IIS>ウェブサイト> [プロパティ]> [ホームディレクトリ]タブ> [設定]ボタン> [追加]」GETで動作するように、HEAD、および:私のフォームは、このフォーマットであります役職。これにより、送信時に405エラーが発生することが防止されます。

編集:POSTをGETに変更し、3つのケースすべてでデータを正しく送信したため、フォームの問題ではありません。残念ながら、私は変数を渡すことはできません(109があります)querystring。

+0

なぜ "c"タグですか? – BobbyShaftoe

答えて

1

一時的にフォームメソッドをGETに変更してみてください。これは、データが送信されているか、どのデータが送信されているかを示します。

私は以前も同様の問題を抱えていました。データが送信されたときではなく、送信されているコンテンツを生成するスクリプトに問題が発生しました。

+0

私はそれをGETに変更し、3つのインスタンスすべてでクエリ文字列にデータを送信しています。 – user101567

2

私は同じ問題を抱えていましたが、残念ながら答えは「これは機能です」と思われます。

詳細はこちら [OK]をクリックして、問題の説明へのリンクを投稿しようとしましたが、「新しいユーザーはリンクを投稿できません」と表示されます。その代わりに、私ができる最善の方法は、「IIS 6:フォームの投稿データが404/405のカスタムエラーハンドラにない」というGoogleの検索を実行することです(引用符で囲んでください)。そして、少なくともこれを書いている時点で、トップの結果は私が参照していたページでなければなりません。要約すると

、何が起こっていることは次のとおりです。

1)あなたの存在しないURL(例えば、mydomain.com/somepageにPOST'dれる) 2)IISはsomepage doesnのことを指摘し、要求を受信存在しない場合は、エラーハンドラへの2番目のリクエストを起動し、そのリクエストのメソッドは内部的にはGETです。そしてあなたのPOSTデータはどれも渡されません。

これは、あなたがなぜであるのかを問わず、すべてがIIS 6で成功したということです。それは私を困惑させる原因になります。

いずれにせよ、上記のリンクをもっと読んでください。

私はIIS 6/Windows2003上でPHPを実行しています。興味深い回避策を発見しました。 PHPはIISからのPOST変数を受け取っていませんが(予想通り)、PHPは依然として "php:// input"で識別される生の入力ストリームにアクセスしています。オリジナルのリクエスト本体を読むことができます。これには、生の形式のPOST変数が含まれています。PHPのparse_str()関数を使用して、生の文字列からPOST変数を取得することができました。

したがって、かもしれません。は、ASP.NETで同様のことを行うことができます。あなたはRequest.InputStreamを検査しようとしましたか?私の記憶が私を正しく奉仕するなら、それはあなたが読むことができるストリームを与えるでしょう。たぶんそれは生のPOSTデータを持っていますか?

-Josh

関連する問題