Используя 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, поскольку запросы с настройками по умолчанию не являются точно эзотерическими или крайними -case, поэтому почти наверняка моя вина. Любые идеи, что я делаю неправильно?