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.