2010-09-04 2 views
5

Как я могу перегрузить действия в ASP.NET MVC, но с поддержкой GET QueryString? Я пытался сделать что-то вроде этого:Перегрузка ASP.NET MVC-действия

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

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

Но когда я достигаю /controller/find?q=abc или /controller/find?q=abc&isBlaBla=false он бросает System.Reflection.AmbiguousMatchException.

Как это исправить?

ответ

2

Вы на самом деле не нужно создавать перегрузки. Все, что вам нужно сделать, это создать единый метод действий со всеми возможными аргументами, которые вы ожидаете, и отобразит значения (где это возможно) для вас.

public JsonResult Find(string q, bool isBlaBla) 
{ 

} 

Вы можете даже использовать Optional Parameters and Name Arguments, если вы используете C# 4.0

+0

Да, но идея в двух перегрузках - это если в URL-адресе вы не указываете isBlaBla, он перенаправляет на первую перегрузку. Должен ли я использовать 'Nullable isBlaBla'? –

+0

Ну, две перегрузки с тем же именем, что и глагол GET, невозможны. Создание isBlaBla? nullable будет работать. – willbt

+0

Я уже пробовал это и пришел к выводу, что ASP.NET MVC не поддерживает перегрузку метода. Я мог ошибаться. –

0

Вы должны использовать маршруты, например. find/abc или find/abc/false

если вы должны использовать строку запроса у не может использовать никаких аргументов и доступа строки запроса в HttpContext

+0

Вы говорите «вы должны ...», но не ** почему ** ... – Fred

1

ASP.NET не поддерживает действия перегружать с тем же глаголом HTTP.

Смежные вопросы