none
Que es mas recomendable usar un Handlers o Controladores para subir imagenes RRS feed

  • Pregunta

  • Hola a todos gusto en saludarlos

    Tengo una aplicación en ASP.Net la cual implemente un plugin de JQuery que permite subir imagenes... Esa aplicación funciona con un Handler ".ashx" el cual gestiona todos los request...

    public class UploadHandler : IHttpHandler
        {
            private readonly JavaScriptSerializer js;

            private string StorageRoot
            {
                get { return Path.Combine(System.Web.HttpContext.Current.Server.MapPath("~/Files/")); } //Path should! always end with '/'
            }

            public UploadHandler()
            {
                js = new JavaScriptSerializer();
                js.MaxJsonLength = 41943040;
            }

            public bool IsReusable { get { return false; } }

            public void ProcessRequest(HttpContext context)
            {
                context.Response.AddHeader("Pragma", "no-cache");
                context.Response.AddHeader("Cache-Control", "private, no-cache");

                HandleMethod(context);
            }

            // Handle request based on method
            private void HandleMethod(HttpContext context)
            {
                switch (context.Request.HttpMethod)
                {
                    case "HEAD":
                    case "GET":
                        if (GivenFilename(context)) DeliverFile(context);
                        else ListCurrentFiles(context);
                        break;

                    case "POST":
                    case "PUT":
                        UploadFile(context);
                        break;

                    case "DELETE":
                        DeleteFile(context);
                        break;

                    case "OPTIONS":
                        ReturnOptions(context);
                        break;

                    default:
                        context.Response.ClearHeaders();
                        context.Response.StatusCode = 405;
                        break;
                }
            }

    }

    El asunto esta en que ahora uso MVC 4 y estaba convirtiendo ese manejo al uso de controladores lo cual resultaria mas comodo y entendible de trabajar, sobre todo cuando se esperan distintos tipos de registros, es decir, el handler maneja reequest con información distinta la cual tiene q discriminar y almacenar en el lugar correcto.

    Leyendo por alli me econtre con que posiblemente los Handlers son mejores para esos casos, incluso mas que los Controladores, ejemplo una persona que tenia un post acerca de este tema comenta lo siguiente:

    IN ORDER TO USE MVC ACTIONS AS HANDLERS OF AJAX CALLS, USE THE FORM DECLARATION BELOW. (THE ONE COMMENTED OUT)
    IT IS NOT ADVISED SINCE WHEN USING MVC CONTROLLER TO HANDLE REQUESTS ONE CAN'T CONTROL THE maxMessageLength OF THE POST REQUEST
    THIS CASTS THE FUNCTIONALITY OF UPLOADING LARGE FILES USELESS, UNLESS YOU SUCRIFICE THE SECURITY AND ALLOW LARGE
    POST MESSAGE SIZES SITE-WIDE.

    IT IS BETTER TO USE HTTP HANDLER TO PROCESS UPLOAD REQUESTS UNTIL MVC FRAMEWORK PROVIDES WAYS TO SET maxMessageLength ON
    PER ACTION BASIS

    Incluso la persona en su post explica un poo el mismo funcionamiento de los Handlers en los controladores y pone comentarios como:

    //DONT USE THIS IF YOU NEED TO ALLOW LARGE FILES UPLOADS
            [HttpGet]
            public void Delete(string id)
            {
             
            }

    Que piensan al respecto ustedes? Realmente es mejor el handler y por que?

    Gracias de antemano

    • Editado AdyIr sábado, 5 de abril de 2014 18:02
    sábado, 5 de abril de 2014 17:55

Todas las respuestas

  • ¿Son muy grandes tus imágenes? El límite por defecto es de 4 MB. Lo que se critica en el post que mencionas es que si quisieras aumentar ese límite en los controladores, tendrías que aumentarlo para TODOS los métodos, con lo que podría disminuir ligeramente la seguridad de tu sitio web, mientras que si lo haces en un .ashx, según el autor podrías aumentar el límite únicamente para el .ashx. Pero, la verdad, yo no sabría cómo cambiarle el tamaño máximo a la carga de datps por mediación del .ashx, solo conozco la propiedad maxRequestLegth en el web.config, que en principio afectaría tanto a los controladores como al .ashx.
    domingo, 6 de abril de 2014 7:11
  • Incluso la persona en su post explica un poo el mismo funcionamiento de los Handlers en los controladores y pone comentarios como //DONT USE THIS IF YOU NEED TO ALLOW LARGE FILES UPLOADS

    pero en esa funcion de Delete() no esta enviando ningun archivo por upload, solo pasa el id para eliminar

    no veo que el comentario corresponda con el codigo que trabaja con un archivo

    ----

    ademas analiza este link

    Validating for large files upon Upload

    alli usan un action y tambien incrementan mediante configuracion el maximo que se puede subir de un archivo

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    domingo, 6 de abril de 2014 14:15