Usando ASP.NET MVC Preview 5 (aunque esto también se ha intentado con Beta), parece que la cadena de consulta predeterminada en una ruta anula el valor que se pasa en la cadena de consulta. Un repro es escribir un controlador de la siguiente manera:ASP.NET MVC QueryString se predetermina reemplazando los valores suministrados?
public class TestController : Controller
{
public ActionResult Foo(int x)
{
Trace.WriteLine(x);
Trace.WriteLine(this.HttpContext.Request.QueryString["x"]);
return new EmptyResult();
}
}
con la ruta asignada de la siguiente manera:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo", x = 1 });
e invocarla con este relativa URI:
/Test/Foo?x=5
La traza de salida I vea es:
1
5
Por lo tanto, en otras palabras, el valor predeterminado que se configuró para la ruta se pasa siempre al método, independientemente de si realmente se suministró en la cadena de consulta. Tenga en cuenta que si se elimina el valor predeterminado para la cadena de consulta, es decir, la ruta está asignada como sigue:
routes.MapRoute(
"test",
"Test/Foo",
new { controller = "Test", action = "Foo" });
continuación, el controlador se comporta como se esperaba y el valor se pasa como el valor del parámetro, dando a la salida de rastreo:
5
5
Esto me parece un error, pero me resulta muy sorprendente que un error como este todavía pueda estar en la versión beta de la estructura ASP.NET MVC, ya que las cadenas con valores predeterminados no son exactamente esotéricas o función de borde de la caja, por lo que es casi seguro que es mi culpa. ¿Alguna idea de lo que estoy haciendo mal?
El desbordamiento de pila necesita un botón de "retraso del proveedor de votos" para esos casos. – John