¿Puedo aumentar maxRequestLength de la solicitud ASP.NET para la acción del controlador MVC con parámetros adicionales?

¿Puedo aumentar maxRequestLength de la solicitud ASP.NET para la acción del controlador MVC con parámetros adicionales?

Tengo un UploadController con un ActionResult que se parece a esto.

  [HttpPost]
  public ActionResult VideoUpload(int memberId)
  {
    var status= _docRepo.SaveDocument(DocumentType.Video, Request.Files, memberId);
        return Json(new { success = true, status = status});
  }

Los archivos pueden ser muy grandes, he aumentado maxRequestLenght en web.config y puedo cargar los archivos, pero estoy preocupado por el problema de seguridad. Así que probé esto y no funciona:

 <location path="VideoUpload">
        <system.web>
            <httpRuntime maxRequestLength="1024000" executionTimeout="600" />
        </system.web>
        <system.webServer>
            <security>
                <requestFiltering>
                    <requestLimits maxAllowedContentLength="1024000"/>
                </requestFiltering>
            </security>
        </system.webServer>
    </location>

¿Algunas ideas? (el método de carga está usando swfupload)

preguntado el 08 de noviembre de 11 a las 10:11

¿También ha aumentado el tiempo de espera de la página o no? -

2 Respuestas

Las acciones del controlador MVC no utilizan el location sección de Web.config. Ver esta respuesta para más información. Puede aumentarlo mediante programación a través de la propiedad MaxRequestLength.

contestado el 23 de mayo de 17 a las 13:05

Establecer la propiedad MaxRequestLength mediante programación se aplicará en todo el sitio. - JTech

¿Ha pensado en llamar al método del controlador de acción de forma asíncrona, incluso con la posibilidad de llamar a un nuevo hilo para guardar el documento de modo que la página web no esté esperando la respuesta y arriesgándose a un tiempo de espera?

Use una llamada jquery ajax para llamar a su controlador y a la biblioteca paralela de tareas para guardar el documento. La llamada ajax puede hacer algo con el controlador de éxito / fracaso que se llama después de obtener la respuesta.

Parece algo como esto

   $(function() {
        $('selector').click(function() {
            var id = $('selector for id').val()
            $.ajax({
                type: "POST",
                url: "/Controller/VideoUpload",
                data: { memberId: id },
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(msg) {
                    $("selector for status").(msg);
                },

            });
        });
    });

El método de acción se vería así, aunque puede que no sea exacto. Tampoco tendría que hacer esto necesariamente, ya que la publicación ajax debería permitir que la llamada al método se ejecute sin que el navegador espere la respuesta.

   [HttpPost]
   public ActionResult VideoUpload(int memberId)
   {
       var status = Task.Factory.StartNew(() => _docRepo.SaveDocument(DocumentType.Video, Request.Files, memberId));
           return Json(new { success = true, status = status.Result});
   }

Respondido 11 Oct 12, 17:10

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.