2008-11-05 13 views
10

He encontrado un problema con ASP.NET que sé que al menos ha dejado perplejo a otra persona. Estábamos tratando de usar un HttpModule para manejar solicitudes de comodines a una aplicación web. La url generada es dinámica y podría tener varios cientos de caracteres. Desafortunadamente, parece ser una limitación en el archivo aspnet_isapi.dll que limita la longitud de la ruta en la URL a MAX_PATH que está codificada en 260 caracteres.ASP.NET url MAX_PATH límite

¿Alguien más se ha encontrado con esto y ha encontrado una manera de superar este límite? Los parámetros de cadena de consulta no son una opción.

Gracias, Greg Ballard

+0

El módulo estaba modificando la URL y el aumento de su longitud? – Will

Respuesta

3

El problema en realidad se encuentra dentro de Windows, no ASP.NET. Windows ha establecido MAX_PATH en 260 y cuando IIS toma una solicitud para un nombre de archivo más largo, fallará. Probablemente ya haya encontrado este artículo de KBase, pero para cualquier otra persona: http://support.microsoft.com/kb/q177665/. La sección Se aplica a: muestra este comportamiento esperado desde NT 3.51 hasta Vista y Server 2003.

En cuanto a una solución alternativa, tuve una situación similar, pero abandonaríamos nuestros intentos de evitar un parámetro de cadena de consulta y lo hizo de todos modos.

2

Gracias por la respuesta. Si bien no encontré ese artículo exacto, encontré algo similar. Sin embargo, esto no es una limitación en IIS. Puede pasar una ruta más larga en la solicitud a IIS y devolverá la respuesta correcta. Puede verificar intentándolo con una página html simple. El problema solo ocurre cuando se usa aspnet_isapi.dll para manejar las solicitudes. Incluso el servidor de depuración integrado en Visual Studio puede manejar rutas más largas que 260.

8

Este es un problema conocido con aspnet_isapi.dll y actualmente no hay ninguna solución. La razón por la que no ve este problema al ejecutar su sitio en el servidor web de Visual Studio incorporado (también conocido como Cassini) es porque todo es código administrado y no depende de aspnet_isapi.dll.

Esto se tratará en una versión futura de ASP.NET.

+5

(+1) 4 años después, y todavía no hay solución. – capdragon

+0

Todavía no se ha corregido a partir de diciembre de 2012. –

0

Puede usar una ISAPI de reescritura de URL como IIRF para volver a escribir la URL en algo que aspnet_isapi pueda procesar.

2

@Haacked:

Phil, que mencionar que este es un problema con aspnet_isapi.dll. ¿Esto no significa que este problema no debería existir en el modo de canalización integrada de IIS7?

Por lo que he oído, sin embargo, (http://forums.iis.net/t/1105360.aspx) todavía lo hace.

Me encuentro con el mismo problema, y ​​me siento como enganchado. Parece que el enrutamiento ASP.NET se ve afectado. Por lo tanto, cualquier aplicación ASP.NET MVC debe tener URL más cortas que 260, después de lo cual debe volver a las cadenas de consulta, lo que parece un total de 180.

(Lo siento por la respuesta ... no-comentar representante suficiente para comentar aún :()

7

Terminé usando el siguiente en el web.config para resolver este problema utilizando MVC2 y .Net Framework 4.0

<httpRuntime maxUrlLength="1000" relaxedUrlToFileSystemMapping="true" /> 
+0

¡Gracias! Me encantan las correcciones simples – Levitikon

+2

Esto no funcionó para mí. –

2

El UrlSegmentMaxLength clave de registro se puede utilizar para aumentar el valor por defecto de Windows máximo de 260 caracteres por segmento de URL en las peticiones HTTP:

  • Clave: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\HTTP\Parameters
  • Valor: UrlSegmentMaxLength
  • Tipo: REG_DWORD
  • Datos: (Su longitud máxima permitida del segmento de Url nuevo, por ejemplo, 4096)

El valor máximo permitido es 32766. Si se especifica un valor mayor, se ignorará. (Crédito: Juan Mendes)

Más sobre http.sys ajustes: http://support.microsoft.com/kb/820129

de reiniciar el ordenador está obligado a realizar un cambio en esta configuración surta efecto. (Crédito: David Rettenbacher, Juan Mendes)

Fuente original de esta respuesta: https://stackoverflow.com/a/7817739/12484