ユーザーリクエストから値を取得するときに、なぜクエリ文字列が好まれるのか疑問に思っています。どこ?1) System.Web.Mvc.DefaultModelBinder のコードは次のようになります (一部のみ):
HttpRequestBase request = controllerContext.HttpContext.Request;
if (request != null)
{
if (request.QueryString != null)
{
values = request.QueryString.GetValues(modelName);
attemptedValue = request.QueryString[modelName];
}
if ((values == null) && (request.Form != null))
{
invariantCulture = CultureInfo.CurrentCulture;
values = request.Form.GetValues(modelName);
attemptedValue = request.Form[modelName];
}
}
2) このシグネチャを持つコントローラーにメソッドがある場合:
public ActionResult Save(int? x, string y) {...
パラメータ (x, y) は、フォームからではなく、クエリ文字列からの値にバインドされます。Request.From からの値は、Request.QueryString からの値よりも優先されると思います。
編集: 2 番目のケースは最初のケース (DefaultModelBinder) が原因であることがわかりました。
背後にある動機は何ですか?