System.Net.WebClientとASP.net MVC 3のWebサイトでいくつか基本的なテストを行いました。アクションのパラメータにバインドすると、MVCはUrlEncodedされたクエリ文字列パラメータを自動的にデコードしますGETを使用する場合。しかし、POSTパラメータを自動的にデコードすることはありません。これには理由がありますか?不必要な不便のようです。ASP.net MVCがPOST(別名フォーム)パラメータを自動的にデコードしないのはなぜですか?
答えて
ASP.NET MVCのデフォルトモデルバインダーは、Request.Form
プロバイダーを使用してPOST値を読み取ります。このプロバイダは、URLエンコードされたパラメータも自動的にデコードします。
次のPOSTペイロード送信する場合、たとえば:だから、あなたはおそらく要求をコード正しくURLではありません
[HttpPost]
public ActionResult Test(string foo, string bar)
{
// foo equals &
// bar equals =
}
:対応するコントローラのアクションに
foo=%26&bar=%3D
を、あなたは正しい値を取得します。
ありがとうダーリン。あなたが正しい。 WebClient.UploadValuesがあなたのためにパラメータをエンコードしていることを認識していなかったので、私はテスト用のパラメータ "didn ' t"を二重にエンコードしていました。 UploadValuesを呼び出す前にURLエンコードを行わなかった場合(つまり、パラメータが1回のみエンコードされた場合)、テスト値のために「潜在的に危険なリクエスト」エラーが発生します。 私は、URLエンコーディングがこのようなエラーを処理すると思っていたので、実際にテスト/理解にレンチを投げました。再度、感謝します。 – Sean
+1これが見つかりました。それが自動的にデコードされているかどうかを知る必要がありました。ありがとう! – ryanulit
webapiは、投稿が発生したときに自動解読も行いますか? –
jQuery.Postを使用していて、以下のスニペットのようにdataパラメータを使用してPOSTデータとしてデータを送信する場合、jqueryは自動的にエンコードします。
var postdata = {
url: someUrl, //do not encodeURIComponent, it's done by jquery.post. test with some edge url if in doubt
};
$.post(serverUrl, postdata)
.done(function (data) {
};
あなた自身もエンコードすると、2重にエンコードされたデータが得られます。 Asp.netコントローラのパラメータは、getまたはpostの場合には常に1回デコードされます。
- 1. ASP.NET MVCコントローラのパラメータが自動的に
- 2. ASP.NET MVC - POSTパラメータ
- 3. Asp.net mvcのネストされたフォームにスコープがないのはなぜですか?
- 4. Asp.net MVCは、異なるパラメータを持つ2つのアクションを区別できないのはなぜですか?
- 5. 動的フォームASP.NET MVC
- 6. Rubyがto_sを自動的に実行しないのはなぜですか?
- 7. 自動テストが動作しないのはなぜですか?
- 8. なぜ$ .postメソッドがIEで動作しないのですか?
- 9. Firefoxで自動的にエンコードされたパラメータをURL内でデコードします。
- 10. Server.HtmlDecodeがデータをデコードしないのはなぜですか?
- 11. ASP.NETで動的HTML選択のフォーム変数が定義されていないのはなぜですか?
- 12. ASP.NET MVC - 異なるエンティティで同じ名前の複数のパラメータをバインドするモデル - GETとPOSTが異なる?
- 13. ToolTipManager.sharedInstance.registerComponent(tree)が自動的に行われないのはなぜですか?
- 14. なぜExpress.jsがPOSTパラメータを正しく読み込めないのですか?
- 15. 再起動後に.Net Windowsサービスが自動的に起動しないのはなぜですか?
- 16. ASP.NET MVC公開後にルーティングが機能しないのはなぜですか?
- 17. なぜこのASP.NETプロファイルセクションが動的にコンパイルできないのですか?
- 18. 名前のないパラメータはなぜ有用なのですか?
- 19. 地図ASP.NET MVCアクション・パラメータ名は別の名前
- 20. asp.net mvcのサーバーコントロールはなぜですか?
- 21. FireBugがASP.NET MVCで動作しない
- 22. .post jquery関数が自分のコードで動作しないのはなぜですか?
- 23. POSTメソッドでajaxが動作しないのはなぜですか?
- 24. 目的C:NSMutableArrayが動作しないのはなぜですか?
- 25. postパラメータがinjectableでない
- 26. ASP.Net MVC(またはCodeIgniter)に内部コントローラリダイレクトがないのはなぜですか?
- 27. なぜPOSTはMVC 4で例外をスローしますか?
- 28. ASP.NET MVCは、ASP.NET Webフォームのようにユーザーコントロールを動的にロードします。
- 29. Html.Helpersを使用してASP.NET MVCフォームで `name`属性を指定できないのはなぜですか?
- 30. ASP.NET MVC - 暗黙的なフォーム操作
チェックアウトのモデルバインディングです。 –