Tengo una aplicación ASP.NET MVC 3 donde los usuarios pueden publicar sugerencias en la línea de "bla bla sería mejor si yada yada yada". Para la página de detalles sugerencia he definido un buen SEO ruta de la siguiente manera:Ruta ASP.NET MVC que falla. ¿Es esto un error o caso de esquina?
routes.MapRoute(null, "suggestion/{id}/{it}/would-be-better-if-{if}",
new { controller = "suggestion", action = "details" });
Como se puede ver Quiero que el "Sería mejor si" la parte que se determinen.
Esta ruta funciona perfectamente para cualquier sugerencia antigua y genera enlaces como suggestion/5/this-site/would-be-better-if-it-had-a-iphone-application
, y al hacer clic en el enlace realmente solicita la página de detalles adecuada.
Un amigo mío, que irónicamente pasa a ser un probador, ha logrado, involuntariamente, publicar una sugerencia que realmente rompe la ruta: "Este sitio sería mejor si 'sería mejor si' siempre estaba alineado en el medio ".
El enlace generado para esta sugerencia es /suggestion/84/this-site/would-be-better-if-would-be-better-if-was-always-alligned-in-the-middle
.
He intentado Phil Haack's Routing Debugger y he confirmado que la ruta funcionará realmente hasta suggestion/84/this-site/would-be-better-if-would-be-better-if-
, por lo que el segundo "mejor-sería-si" es realmente aceptado; agregar algo después de eso hará que la URL no coincida con ninguna ruta (gracias a Omar -ver comentarios- para obtener ayuda).
Por favor tener en cuenta que Realmente no quiero cambiar la definición de la ruta ya que creo que es tan bueno como puedo manejar para este caso, SEO se refiere.
Así que, ¿cómo es que tener texto igual a la parte fija de la ruta impide el enlace de la concordancia de la ruta? ¿por qué es la ruta de la ruptura?
En realidad, estoy más interesado en el por qué, ya que creo que entender el por qué dará lugar a una solución o al menos una comprensión adecuada de un problema bastante interesante.
Esto es muy interesante. No estoy seguro de por qué está sucediendo, pero si desea una solución temporal, reemplace '- {if}' con '/ {if}'. Supongo que ASP.NET MVC trata '/' diferente de otros caracteres. – Omar
Algunas pruebas revelaron que la ruta 'sugerencia/84/this-site/would-be-better-if-would-be-better-if-' funciona; solo después de que tenga algo después del último '-' se rompe. – Omar
@Omar - I * really * no quiero cambiar la ruta, aunque la solución propuesta es bastante aceptable.En cuanto a tu segundo comentario, gracias, lo extrañé por completo ... Esto lo hace aún más curioso si me preguntas. –