.NET MVC пользовательская маршрутизация с пустыми параметрами - PullRequest
0 голосов
/ 29 октября 2009

У меня есть .net mvc со следующими маршрутами:

routes.Add(new Route(
            "Lookups/{searchtype}/{inputtype}/{firstname}/{middlename}/{lastname}/{city}/{state}/{address}", 
            new RouteValueDictionary( new { controller = "Lookups", action = "Search", firstname = (string)null, middlename = (string)null, lastname = (string)null, city = (string)null, state = (string)null, address = (string)null, SearchType = SearchType.PeopleSearch, InputType = InputType.Name }),
            new MvcRouteHandler())
        );

        routes.Add(new Route(
            "Lookups/{searchtype}/{inputtype}", 
            new RouteValueDictionary( new { controller = "Lookups", action = "Search", firstname = "", middlename = "", lastname = "", city = "", state = "", address = "" }),
            new MvcRouteHandler())
        );

        routes.Add(new Route(
            "Lookups/{searchtype}/{inputtype}", 
            new RouteValueDictionary( new { controller = "Lookups", action = "Search", firstname = "", middlename = "", lastname = "", city = "", state = "", address = "", SearchType = SearchType.PeopleSearch, InputType = InputType.Name }),
            new MvcRouteHandler())
        );

        routes.MapRoute(
            "Default",                                              // Route name
            "{controller}/{action}/{id}",                           // URL with parameters
            new { controller = "Account", action = "LogOn", id = "" }  // Parameter defaults
        );

Следующий запрос работает нормально:

http://localhost:2608/Lookups/PeopleSearch/Name/john/w/smith/seattle/wa/123 основной

Этот запрос не работает:

http://localhost:2608/Lookups/PeopleSearch/Name/john//smith//wa/

Не все запросы будут иметь все параметры, и я хотел бы, чтобы пустые параметры передавались методу как пустая строка или ноль.

Где я иду не так?

Метод:

public ActionResult Search(string firstname, string middlename, string lastname, string city, string state, string address, SearchType searchtype, InputType inputtype)
    {
        SearchRequest r = new SearchRequest { Firstname = firstname, Middlename = middlename, Lastname = lastname, City = city, State = state, Address = address, SearchType = searchtype, InputType = inputtype };
        return View(r);
    }

1 Ответ

2 голосов
/ 29 октября 2009

Я вижу одну проблему, ваш второй и третий маршрут имеют абсолютно одинаковые параметры URL. Таким образом, третий маршрут никогда не будет вызван. Почему у вас это там? Похоже, вы можете просто удалить второй маршрут.

Кроме того, второй маршрут имеет меньше параметров, чем первый. Это означает, что первый маршрут, вероятно, будет соответствовать обоим URL-адресам, которые вы разместили. Возможно, вам следует изменить порядок этих маршрутов.

ОБНОВЛЕНИЕ: О! Я не заметил двойной косой черты в URL. Это никогда не сработает. Это недопустимый URL-адрес для ASP.NET, и поэтому ASP.NET блокирует запрос еще до того, как он попадет в маршрут.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...