ASP.NET MVC Preview 5 を使用すると (これはベータ版でも試行されています)、ルートのクエリ文字列の既定値が、クエリ文字列で渡される値をオーバーライドするようです。再現は、次のようなコントローラーを作成することです。
public class TestController : Controller
{
public ActionResult Foo(int x)
{
Trace.WriteLine(x);
Trace.WriteLine(this.HttpContext.Request.QueryString["x"]);
return new EmptyResult();
}
}
ルートは次のようにマッピングされます。
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo", x = 1 });
次に、この相対 URI で呼び出します。
/Test/Foo?x=5
私が見るトレース出力は次のとおりです。
1
5
つまり、ルートに設定されたデフォルト値は、クエリ文字列で実際に指定されたかどうかに関係なく、常にメソッドに渡されます。クエリ文字列のデフォルトが削除された場合、つまりルートは次のようにマッピングされることに注意してください。
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo" });
その後、コントローラーは期待どおりに動作し、値がパラメーター値として渡され、トレース出力が得られます。
5
5
これはバグのように見えますが、このようなバグが ASP.NET MVC フレームワークのベータ リリースにまだ残っている可能性があることは非常に驚くべきことです。デフォルトのクエリ文字列は厳密には難解な機能でもエッジ ケースの機能でもないためです。 、だからほぼ間違いなく私のせいです。私が間違っていることはありますか?