使用ASP.NET MVC预览版5(虽然这也已经在Beta版中试过了),但似乎查询字符串中的querystring默认值会覆盖传入的值。甲REPRO是编写这样的控制器:ASP.NET MVC的QueryString默认覆盖提供的值?
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框架的测试版中发现,因为具有默认值的querystrings并不完全是一个深奥的或边缘特征,所以它几乎肯定是我的错。任何想法我做错了什么?
对于这些情况,堆栈溢出需要“投票供应商推迟”按钮。 – John 2015-07-28 15:09:11