Вам не нужны два маршрута, потому что вы предоставляете параметры поиска в виде строки запроса.Просто выберите один маршрут поиска:
routes.MapRoute(
"Search",
"Search",
new { controller = "Search", action = "Search" }
);
Затем запишите это действие контроллера
public ActionResult Search(int? type, string q)
{
var defaultType = type.HasValue ? type.Value : 1;
if (string.IsNullOrEmpty(q))
{
// perform search
}
// do other stuff
}
Основная часть этого метода в значительной степени зависит от условия поиска, требуются ли оба параметра при поиске содержимогоили просто q
, и у вас есть значение по умолчанию для type
.Помните, что индексация страницы может быть выполнена точно так же.
Использование параметров строгого типа (проверка правильности)
Конечно, вы можете создать класс, который может быть проверен, но имена свойств должны отражать этостроки запроса.Таким образом, у вас будет либо класс:
public class SearchTerms
{
public int? type { get; set; }
public string q { get; set; }
}
, и вы будете использовать тот же запрос с переменными запроса с одинаковыми именами, что и сейчас, либо иметь чистый класс и настроить свой запрос:
public class SearchTerms
{
public int? Type { get; set; }
public string Query { get; set; }
}
http://domain.com/Search?Type=1&Query=search+text