Где я должен добавить (закодированную в URL) строку запроса в мой именованный маршрут? - PullRequest
0 голосов
/ 11 марта 2009

В моем контроллере asp.net-mvc я принимаю несколько значений полей формы и из них создаю строку, понятную библиотеке Lucene. Затем я хочу перенаправить метод get, который будет показывать результаты в зависимости от этой строки lucene.

Строка lucene находится в шаблоне {fieldName1: value1 fieldName2: value2 ...}

my Global.asax содержит следующую запись для цели перенаправления:

routes.MapRoute(
    "AdvancedSearch",
    "AdvancedSearch.mvc/{displayType}/luceneString",
    new { controller = "Search", action = "AdvancedSearch",
          displayType = "chip", luceneString = "" }
);

Итак, мой контроллер ловит сообщение, создает luceneString и выполняет следующее:

return RedirectToRoute("AdvancedSearch", new
    {
        Controller = "Search",
        action = "AdvancedSearch",            
        displayType = "chip",
        queryString = Url.Encode("company:test name:testname")
     });

Это дает мне 500: плохой запрос. Даже с одним параметром это не работает. Даже с ":" это не работает.
Я попробовал:

  • AdvancedSearch.mvc / чип / компания% 3Atest + имя% 3AtestName
  • AdvancedSearch.mvc / чип / компания: тест + название: АСМАП
  • AdvancedSearch.mvc / чип / компания: тест
  • AdvancedSearch.mvc / чип / фирма% 3Atest

Это работает, только если я изменил этот URL-адрес, чтобы взять queryString в формате

AdvancedSearch.mvc/chip?q=company%3Atest+name%3AtestName

Что я должен сделать, чтобы получить правильное кодирование, не прибегая к "? Q ="
Если мне нужно использовать строку запроса, как я могу определить такую ​​вещь в таблице маршрутов? Как я собираюсь вызвать переадресацию на него?

1 Ответ

3 голосов
/ 11 марта 2009

Во-первых, ваш MapRoute не должен содержать ничего относительно строки запроса. Маршруты содержат только часть ресурса URI; они не включают в себя запрос.

Во-вторых, вам не нужно кодировать строку запроса; ActionLink / RouteLink / и т.д.. сделаю это для вас. Когда вы создаете HREF, все токены, не содержащиеся в маршруте, автоматически становятся параметрами строки запроса.

Удалить:

/luceneString

... с вашего маршрута.

Измените свой код на:

return RedirectToRoute("AdvancedSearch", new
{
    Controller = "Search",
    action = "AdvancedSearch",            
    displayType = "chip",
    q = "company:test name:testname"
 });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...