2010-09-04 16 views
5

Come è possibile sovraccaricare le azioni in ASP.NET MVC, ma con il supporto per GET QueryString? Ho cercato di fare qualcosa di simile:Sovraccarico Azioni MVC ASP.NET

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

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

Ma ogni volta che accedo /controller/find?q=abc o /controller/find?q=abc&isBlaBla=false viene generata System.Reflection.AmbiguousMatchException.

Come risolvere il problema?

risposta

2

In realtà non c'è bisogno di creare sovraccarichi. Tutto ciò che devi fare è creare un singolo metodo di azione con tutti gli argomenti possibili che ti aspetti e mapperà i valori (ove possibile) per te.

public JsonResult Find(string q, bool isBlaBla) 
{ 

} 

Si potrebbe anche fare uso di Optional Parameters and Name Arguments se si sta utilizzando C# 4.0

+0

Sì, ma l'idea in due overload è se nell'URL non si specifica isBlaBla, esso reindirizza al primo overload. Dovrei usare 'Nullable isBlaBla'? –

+0

Bene due sovraccarichi con lo stesso nome che accettano il verbo GET non sono possibili. Fare èBlaBla? nullable funzionerà. – willbt

+0

Ho provato prima e sono giunto alla conclusione che ASP.NET MVC non supporta l'overloading dei metodi. Potrei sbagliarmi però. –

0

dovresti utilizzare percorsi, ad es. find/abc o find/abc/false

se è necessario utilizzare una stringa di query u possibile utilizzare senza argomenti e accedere querystring nel HttpContext

+0

Si dice "si dovrebbe ..." ma non ** perché ** ... – Fred

1

ASP.NET non supporta l'azione di sovraccaricare con lo stesso verbo HTTP.