2010-08-29 24 views
7

En mi archivo GLOBAL.ASAX, quiero trazar una ruta como esta:Cómo enrutar una cadena de consulta con "?" y cómo manejarlo

http://domain.com/add/link?url=http%3A%2F%2Fgoogle.com 

y luego coger usando mi LinkController con acción llamada Add.

¿Hago esto?

global.asax->

routes.MapRoute(
    "AddLink", 
    "Add/Link?{url}", 
    new { controller = "Link", action = "Add" } 
); 

LinkController->

public string Add(string url) 
{ 
    return url; // just want to output it to the webpage for testing 
} 

?? Eso no parece funcionar. ¿Qué estoy haciendo mal? ¡Gracias!

Respuesta

15

ASP.Net MVC vinculará automáticamente los parámetros de la cadena de consulta; no necesitas ponerlo en la ruta.

La ruta puede ser simplemente

routes.MapRoute(
    "AddLink", 
    "Add/Link", 
    new { controller = "Link", action = "Add" } 
); 
+0

¡Muchísimas gracias! Eso lo hizo. –

0

Mostrar ValueProviderFactories código fuente MVC.

namespace System.Web.Mvc { 
    using System; 

    public static class ValueProviderFactories { 

     private static readonly ValueProviderFactoryCollection _factories = new ValueProviderFactoryCollection() { 
      new FormValueProviderFactory(), 
      new RouteDataValueProviderFactory(), 
      new QueryStringValueProviderFactory(), 
      new HttpFileCollectionValueProviderFactory() 
     }; 

     public static ValueProviderFactoryCollection Factories { 
      get { 
       return _factories; 
      } 
     } 

    } 
} 
+1

um, haz lo que ahora? ;) –

+0

Parámetros de acción vinculantes IModelBinder. DefaultModelBinder extrae el valor de HttpRequest use ValueProviderFactories. Entonces, el parámetro de acción enlaza automáticamente Form/Route/QueryString/UplodFile. – takepara

Cuestiones relacionadas