asp.net-mvc url-routing asp.net-mvc-routing value-provider

asp.net mvc - Precedencia del parámetro de enrutamiento MVC



asp.net-mvc url-routing (1)

La cadena de consulta no tiene nada que ver con el enrutamiento (al menos, a menos que personalice el enrutamiento para considerarlo).

Los proveedores de valor lo hacen los valores que se pasan a ModelBinder y a su método de acción. Puede controlar el orden de precedencia cambiando el orden en el que se registra su ValueProviderFactory correspondiente en la propiedad estática ValueProviderFactories.Factories .

Como puede ver, la configuración predeterminada es utilizar primero el RouteDataValueProviderFactory y si no devuelve ningún valor, probará el QueryStringValueProviderFactory . Si cambia el orden de las fábricas, el orden de precedencia cambia.

ValueProviderFactories.Factories.RemoveAt(3); ValueProviderFactories.Factories.Insert(4, new RouteDataValueProviderFactory());

Encontré un escenario en el que tenía la configuración de ruta MVC predeterminada. Al igual que.

routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } );

Luego navegando a una url como tal

domain/controller/action/1234

En esta página, estaba navegando a la misma página pero con diferentes parámetros después de un determinado evento. Al igual que.

var id = $(this).data("id"); var url = "@Url.Action("action", "controller", new { area = ""})"; var params = $.param({id: id, vrnsearch: true}); var fullUrl = url += "?" + params; window.location.href = fullUrl;

Noté que la url todavía mantenía la misma identificación en la url y adjuntaba parámetros como ese.

domain/controller/action/1234?id=4321&vrnsearch=true

Ahora mi pregunta es, ¿hay alguna manera de determinar una precedencia sobre si debe usar el valor para id de la url o del parámetro?

De hecho, he encontrado una solución / solución para mi problema usando el siguiente, que elimina la identificación de la url y solo usa parámetros.

@Url.Action("action","controller", new {id = "", area = ""})

Sin embargo, era curioso si existe una precedencia en los parámetros frente al enrutamiento de URL.