route net mvc maproute attribute asp asp.net-mvc parameters routing

asp.net-mvc - net - route controller mvc 5



Encaminamiento personalizado.NET MVC con parámetros vacíos (1)

Tengo un mvc .net con las siguientes rutas:

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 );

La siguiente solicitud funciona bien:

http: // localhost: 2608 / Búsquedas / PeopleSearch / Name / john / w / smith / seattle / wa / 123 principales

Esta solicitud no funciona:

http: // localhost: 2608 / Búsquedas / PeopleSearch / Name / john // smith // wa /

No todas las solicitudes tendrán todos los parámetros y me gustaría que los parámetros vacíos pasen al método como cadena vacía o nulo.

¿Dónde estoy equivocado?

El método:

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); }


Veo un problema, su segunda y tercera ruta tienen exactamente los mismos parámetros de URL. Entonces la tercera ruta nunca será llamada. ¿Por qué tienes eso allí? Parece que simplemente podría eliminar la segunda ruta.

Además, la segunda ruta tiene menos parámetros que la primera ruta. Eso significa que la primera ruta probablemente coincidirá con las URL que ha publicado. Probablemente deberías volver a ordenar esas rutas.

ACTUALIZACIÓN: ¡Oh! No noté la doble barra en la URL. Eso nunca funcionará. No es una URL válida en lo que respecta a ASP.NET y, por lo tanto, ASP.NET está bloqueando la solicitud incluso antes de que llegue al enrutamiento.