2010-09-04 27 views
5

¿Cómo puedo sobrecargar acciones en ASP.NET MVC, pero con el apoyo de cadena de consulta GET? Traté de hacer algo como esto:acciones sobrecarga ASP.NET MVC

public JsonResult Find(string q) 
{ 
    ... 
} 

public JsonResult Find(string q, bool isBlaBla) 
{ 
    ... 
} 

Pero cada vez que accedo /controller/find?q=abc o /controller/find?q=abc&isBlaBla=false lanza una System.Reflection.AmbiguousMatchException.

¿Cómo solucionar esto?

Respuesta

2

En realidad no es necesario para crear sobrecargas. Todo lo que necesita hacer es crear un método de acción único con todos los argumentos posibles que espera y correlacionará los valores (cuando sea posible) por usted.

public JsonResult Find(string q, bool isBlaBla) 
{ 

} 

Incluso se puede hacer uso de Optional Parameters and Name Arguments si estás usando C# 4.0

+0

Sí, pero la idea en dos sobrecargas es si en la url no especifica isBlaBla, redirige a la primera sobrecarga. ¿Debo usar 'Nullable isBlaBla'? –

+0

Bueno, dos sobrecargas del mismo nombre que aceptan el verbo GET no son posibles. Hacer isBlaBla? Nullable funcionará. – willbt

+0

He intentado esto antes y llegué a la conclusión de que ASP.NET MVC no admite la sobrecarga de métodos. Sin embargo, podría estar equivocado. –

0

usted debe utilizar rutas, por ejemplo, find/abc o find/abc/false

si debe utilizar una cadena de consulta u puede utilizar sin argumentos y acceder a la cadena de consulta en el HttpContext

+0

Usted dice "debería ..." pero no ** por qué ** ... – Fred

1

ASP.NET no admite la acción de la sobrecarga con el mismo verbo HTTP.

Cuestiones relacionadas