ASP.NET MVC QueryString par défaut substituant des valeurs fournies?

À l'aide de ASP.NET MVC Aperçu 5 (bien que cela a aussi été essayé avec la version Bêta), il semble que la chaîne de recherche par défaut dans un itinéraire remplacer la valeur qui est passée sur la chaîne de requête. Une repro est d'écrire un contrôleur comme ceci:

public class TestController : Controller
{
    public ActionResult Foo(int x)
    {
        Trace.WriteLine(x);
        Trace.WriteLine(this.HttpContext.Request.QueryString["x"]);
        return new EmptyResult();
    }
}

Avec de l'itinéraire tracé comme suit:

routes.MapRoute(
    "test",
    "Test/Foo",
    new { controller = "Test", action = "Foo", x = 1 });

Et puis l'invoquer à cette URI relatif:

/Test/Foo?x=5

La sortie de trace je vois, c'est:

1
5

Donc, en d'autres mots, la valeur par défaut qui a été mis en place pour l'itinéraire est toujours passé dans la méthode, indépendamment de savoir si elle a été effectivement fournis dans la chaîne de requête. Notez que si la valeur par défaut de la chaîne de requête est supprimée, c'est à dire le chemin est tracé comme suit:

routes.MapRoute(
    "test",
    "Test/Foo",
    new { controller = "Test", action = "Foo" });

Le régulateur se comporte comme prévu et la valeur est transmise en tant que paramètre de valeur, donnant à la sortie de trace:

5
5

Cela ressemble pour moi comme un bug, mais je pense qu'il serait très surprenant qu'un bug comme celui-ci pourrait encore être dans la version bêta de l'ASP.NET framework MVC, comme querystrings avec les valeurs par défaut ne sont pas exactement ésotérique ou le bord de cas sur la fonctionnalité, de sorte qu'il est presque certainement de ma faute. Les idées de ce que je fais mal?

  • Un débordement de pile a besoin d'un "vote vendeur en retard" bouton pour ces cas.
InformationsquelleAutor Greg Beech | 2009-01-19