Tengo un proyecto que requiere que mis URL tengan puntos en la ruta. Por ejemplo, puedo tener una URL como www.example.com/people/michael.phelps
Las URL con el punto generan un 404. Mi enrutamiento está bien. Si paso michaelphelps, sin el punto, entonces todo funciona. Si agrego el punto, obtengo un error 404. El sitio de muestra se ejecuta en Windows 7 con IIS8 Express. URLScan no se está ejecutando.
Intenté agregar lo siguiente a mi web.config:
<security>
<requestFiltering allowDoubleEscaping="true"/>
</security>
Desafortunadamente eso no hizo la diferencia. Acabo de recibir un error 404.0 No encontrado.
Este es un proyecto MVC4 pero no creo que sea relevante. Mi enrutamiento funciona bien y los parámetros que espero están allí, hasta que incluyan un punto.
¿Qué necesito configurar para poder tener puntos en mi URL?
fuente
Respuestas:
Obtuve esto trabajando editando los controladores HTTP de mi sitio. Para mis necesidades, esto funciona bien y resuelve mi problema.
Simplemente agregué un nuevo controlador HTTP que busca criterios de ruta específicos. Si la solicitud coincide, se envía correctamente a .NET para su procesamiento. Estoy mucho más feliz con esta solución que URLRewrite hackear o habilitar RAMMFAR.
Por ejemplo, para que .NET procese la URL www.example.com/people/michael.phelps agregue la siguiente línea al web.config de su sitio dentro del
system.webServer / handlers
elemento:Editar
Hay otras publicaciones que sugieren que la solución a este problema es
RAMMFAR
oRunAllManagedModulesForAllRequests
. Habilitar esta opción habilitará todos los módulos administrados para todas las solicitudes. Eso significa que los archivos estáticos como imágenes, PDF y todo lo demás serán procesados por .NET cuando no sea necesario. Es mejor dejar esta opción a menos que tenga un caso específico.fuente
Después de hurgar un poco, descubrí que relajadoUrlToFileSystemMapping no funcionó en absoluto para mí, lo que funcionó en mi caso fue configurar RAMMFAR en verdadero, lo mismo es válido para (.net 4.0 + mvc3) y (.net 4.5 + mvc4).
Tenga en cuenta al configurar RAMMFAR la verdadera publicación de Hanselman sobre RAMMFAR y el rendimiento
fuente
Creo que debe establecer la propiedad RelaxUrlToFileSystemMapping en su web.config. Haack escribió un artículo sobre esto hace un tiempo (y hay otras publicaciones SO que hacen los mismos tipos de preguntas)
Editar De los comentarios a continuación, las versiones posteriores de .NET / IIS pueden requerir que esté en el
system.WebServer
elemento.fuente
Me quedé atrapado en este problema durante mucho tiempo siguiendo todos los remedios diferentes sin resultado.
Noté que al agregar una barra diagonal [/] al final de la URL que contiene los puntos [.], No arrojó un error 404 y realmente funcionó.
Finalmente resolví el problema usando una regrabadora de URL como IIS URL Rewrite para observar un patrón particular y agregar la barra diagonal de entrenamiento.
Mi URL se ve así: /Contact/~firstname.lastname, por lo que mi patrón es simplemente: /Contact/~(.*[^/font>)$
Tengo esta idea de Scott Forsyth, vea el enlace a continuación: http://weblogs.asp.net/owscott/handing-mvc-paths-with-dots-in-the-path
fuente
Simplemente agregue esta sección a Web.config, y todas las solicitudes a la ruta / {* pathInfo} serán manejadas por el controlador especificado, incluso cuando haya puntos en pathInfo. (tomado del ejemplo de ServiceStack MVC Host Web.config y esta respuesta https://stackoverflow.com/a/12151501/801189 )
Esto debería funcionar tanto para IIS 6 como para 7. Puede asignar controladores específicos a diferentes rutas después de la 'ruta' modificando path = "*" en los elementos 'agregar'
fuente
MVC 5.0 Solución alternativa.
Muchas de las respuestas sugeridas no parecen funcionar en MVC 5.0.
Como el problema de 404 puntos en la última sección se puede resolver cerrando esa sección con una barra diagonal, aquí está el pequeño truco que uso, limpio y simple.
Mientras mantiene un marcador de posición conveniente en su vista:
agregue un poco de jquery / javascript para hacer el trabajo:
tenga en cuenta la barra inclinada final, que es responsable de cambiar
dentro
fuente
Respuesta súper fácil para aquellos que solo tienen esto en una página web. Edite su actionlink y un + "/" al final del mismo.
fuente
Es posible que desee pensar en usar guiones en lugar de puntos.
En Pro ASP MVC 3 Framework sugieren esto sobre hacer URL amigables:
También menciona que las URL deberían ser fáciles de leer y cambiar para los humanos. Quizás una razón para pensar en usar un guión en lugar de un punto también proviene del mismo libro:
Entonces, aunque un período aún es legible para los humanos (aunque menos legible que los guiones, en mi opinión), aún puede ser un poco confuso / engañoso dependiendo de lo que viene después del período. ¿Qué pasa si alguien tiene un apellido de zip? Entonces la URL será /John.zip en lugar de / John-zip, algo que puede ser engañoso incluso para el desarrollador que escribió la aplicación.
fuente
.
) con guiones en sus URL de usuario: PDependiendo de lo importante que sea para usted mantener su URI sin cadenas de consulta, también puede pasar el valor con puntos como parte de la cadena de consulta, no el URI.
Por ejemplo, www.example.com/people?name=michael.phelps funcionará, sin tener que cambiar ninguna configuración ni nada.
Pierde la elegancia de tener un URI limpio, pero esta solución no requiere cambiar o agregar configuraciones o controladores.
fuente
¿Sería posible cambiar su estructura de URL?
Para lo que estaba trabajando probé una ruta para
pero falló con cualquier cosa que tuviera un. en eso.
Cambié la ruta a
Ahora puedo poner
localhost:xxxxx/File1.doc/Download
y funciona bien.Mis ayudantes en la vista también lo captaron
eso hace un enlace a la
localhost:xxxxx/File1.doc/Download
formato.Tal vez podría poner una palabra innecesaria como "/ view" o acción al final de su ruta para que su propiedad pueda terminar con un final
/
como/mike.smith/view
fuente
Es tan simple como cambiar path = " ." a la ruta = " ". Simplemente elimine el punto en la ruta de ExensionlessUrlHandler-Integrated-4.0 en web.config.
Aquí hay un buen artículo https://weblog.west-wind.com/posts/2015/Nov/13/Serving-URLs-with-File-Extensions-in-an-ASPNET-MVC-Application
fuente
Intenté todas las soluciones anteriores, pero ninguna funcionó para mí. Lo que funcionó fue desinstalar versiones .NET> 4.5, incluidas todas sus versiones multilingües; Eventualmente agregué versiones más nuevas (solo en inglés) pieza por pieza. En este momento las versiones instaladas en mi sistema son las siguientes:
Y todavía funciona en este punto. Tengo miedo de instalar 4.6.2 porque podría estropear todo.
Así que solo pude especular que 4.6.2 o todas esas versiones que no están en inglés estaban arruinando mi configuración.
fuente
Pude resolver mi versión particular de este problema (tuve que hacer /customer.html ruta a / customer, no se permiten barras diagonales finales) usando la solución en https://stackoverflow.com/a/13082446/1454265 , y sustituyendo la ruta = "*. html".
fuente
Como solución también podría estar considerando codificar a un formato que no contenga símbolo
.
, como base64.En js se debe agregar
En el controlador
fuente
Agregue la regla de reescritura de URL al archivo Web.config. Debe tener el módulo URL Rewrite ya instalado en IIS. Use la siguiente regla de reescritura como inspiración para la suya.
fuente
Además, (relacionado) verifique el orden de sus asignaciones de controladores. Teníamos un .ashx con un .svc (por ejemplo, /foo.asmx/bar.svc/path) en la ruta de acceso. La asignación .svc fue primero 404 para la ruta .svc que coincidía antes que .asmx. No había pensado demasiado, pero tal vez la url que codifica el camino se encargaría de esto.
fuente
fuente