2011-01-14 17 views
6

He visto que IIS tiene un problema al permitir que los dos puntos entren en las URL. También vi las sugerencias que otros ofrecían here.ASP.NET MVC Colón en la URL

Con el sitio que estoy trabajando, quiero ser capaz de pasar títulos de películas, libros, etc., en mi URL, incluido el colon, así:

mysite.com/Movie/Bob:The Return 

Esto sería consumido por mi MovieController, por ejemplo, como una cadena y se utiliza más adelante en la línea.

Me doy cuenta de que un colon no es ideal. ¿Alguien tiene alguna otra sugerencia? A pesar de lo pobre que es en la actualidad, estoy buscando y reemplazando desde todos los dos puntos (:) a otro personaje, luego lo remplazo cuando quiero consumirlo en el extremo del Controlador.

+0

¿Por qué usaría dos puntos? ¿Encontraste que esto funciona en servidores que no sean IIS? Desearía que ni siquiera se permitiera el colon para especificar los números de los puertos porque haría que el análisis del protocolo sea mucho más simple. Use un guión, guión bajo u otro carácter. O hazlo en otro nivel como 'mysite.com/Movie/Bob/The + Return'. –

+0

El problema con hacer 'mysite.com/Movie/Bob/The + Return' sería averiguar cómo tomar el título de una película (" Bob: The Return ") y saber" Oye, aquí había dos puntos en el título. ..Debo volver a armar eso ". –

+0

Tal vez debería aprobar una clase que tenga tanto el título como la babosa en lugar de solo el título de la película como una cadena. –

Respuesta

3

Considere URL encoding and decoding sus títulos de películas.

Terminarías con foo.com/bar/Bob%58The%20Return

Como alternativa, considere el aprovechamiento de un HTML helper to remove URL unfriendly characters in URLs (método es URLFriendly()). Los beneficios de SEO entre dos puntos y un marcador de posición (por ejemplo, un guión) probablemente serían insignificantes.

+9

Intenté hacer codificación/decodificación. IIS todavía parecía ver eso y decir: "Oye, eso sigue siendo un punto. ¡Lanza un error de 400!" –

0

Colón es un carácter reservado e inválido en un URI según RFC 3986. Entonces no hagas algo que viole la especificación. Necesita codificarlo URL o usar otro personaje. Y aquí hay un nice blog post que podría echarle un vistazo.

+0

¿Dónde dice que no es válido? ¿Estoy interpretando esto incorrectamente? pchar = unreserved/pct-encoded/sub-delims/":"/"@" – darkangel

0

La forma más sencilla es usar System.Web.HttpUtility.UrlEncode() al compilar el url y System.Web.HttpUtility.UrlDecode al interpretar los resultados que se devuelven. También podría tener problemas con el carácter de espacio si no codifica el valor primero.

2

Una de las mayores preocupaciones con su enfoque es que el nombre de la película no siempre será único (por ejemplo, "The Italian Job"). Además, ¿qué pasa con otros caracteres ilegales (por ejemplo, corchetes, etc.)?

Puede ser una buena idea usar un número de identificación en la url para ubicar la película en su base de datos. Todavía podría incluir una copia amistosa del nombre de la película en su url, pero no tendría que preocuparse por volver al título original con todos los caracteres ilegales.

Un buen ejemplo es la URL de esta página. Se puede ver que retirar el título de la página sigue funcionando:

ASP.NET MVC Colon in URL

ASP.NET MVC Colon in URL

+0

Esta es una idea interesante. Tendré que investigar esto. –

6

que resuelven este problema agregando esto a mi web.config:

<httpRuntime requestPathInvalidCharacters=""/> 

Esto debe estar dentro de la sección system.web.

El valor por defecto es:

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,:,\,?"/> 

Así que sólo hacen una excepción para los dos puntos que se convertiría en

<httpRuntime requestPathInvalidCharacters="&lt;,&gt;,*,%,&amp;,\,?"/> 

Leer más en: http://msdn.microsoft.com/en-us/library/system.web.configuration.httpruntimesection.requestpathinvalidcharacters.aspx

Por lo que entiendo el carácter de dos puntos es aceptable como un carácter no codificado en una URL. No sé por qué lo agregaron al valor predeterminado de requestPathInvalidCharacters.

Cuestiones relacionadas