2010-02-15 13 views
8

¿Cómo puedo establecer el valor de maxAllowedContentLength por acción?Establecer el valor de MaxAllowedContentLength/maxRequestLength por acción

Tengo algunas acciones que solían cargar archivos, cada uno necesita un valor de maxAllowedContentLength diferente.

Tiene sentido que no deseemos utilizar filtros de acción, ya que queremos filtrar esta solicitud al nivel de IIS. Por otro lado, filtro de acción es la mejor solución desde la perspectiva de codificación, ya que vienen después de las rutas, por lo que las rutas cambian, continúa trabajando.

En IIS6 Sé que podemos utilizar <location> etiqueta para especificar maxRequestLength a una ubicación específica. No sé cómo utilizar este enfoque en IIS7, y no me gusta este enfoque, ya que las rutas url están codificadas a mano en el web.config.

¿Cuál es la mejor solución para resolver este problema?

+1

Lástima que nunca se haya respondido: es un tema muy importante cuando se programan páginas de carga de archivos con ASP.NET MVC. –

Respuesta

1

No encontré la manera de lograrlo, y no creo que exista. Probablemente lo mejor que se puede hacer es usar un sitio web de IIS diferente para las acciones de descarga de archivos, con web.config personalizado.

+0

Debe haber una manera ... :) Lo más probable es que puedas usar el reflejo y hackear el tiempo de ejecución de .NET y modificar la configuración. No es fácil, pero debería funcionar? (He hecho cosas similares en el pasado, para sincronizar claves de autenticación entre otras aplicaciones). – Onkelborg

+0

@Onkelborg desea dar una respuesta detallada al respecto? de lo que podré aceptarlo como respuesta ... –

+0

He cavado en el framework con la ayuda de ILSpy y he excavado un poco. Creo que la manera más fácil sería volver a escribir el web.config y luego aceptar que la aplicación se reiniciará una vez. Sin embargo, parece que es posible reescribir en memoria en tiempo de ejecución, pero es bastante complicado. No creo que pueda tener un maxAllowedContentLength por ubicación diferente, pero puede tener un maxRequestLength diferente por ubicación. – Onkelborg

0

Cree un sitio virtual independiente para el área que desea para el filtrado diferente.

A continuación, ejecute este comando en su servidor IIS. (Reemplace [IISWebsitename])

C:\Windows\System32\inetsrv>appcmd set config "[IISWebsitename]" -section:requestFiltering -requestLimits.maxAllowedContentLength:100000000 -commitpath:apphost 

que permite a 100.000.000 bytes de datos de subida a la vez para ese sitio web uno.

+1

No me gusta usar Command-Line. Pero si ya estoy usando un sitio diferente, puedo usar Web.config para establecer maxAllowedContentLength. –

Cuestiones relacionadas