Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • David Zweben 268 posts 754 karma points
    Aug 12, 2019 @ 21:09
    David Zweben
    0

    Implementing UmbracoHttpHandler?

    I am trying to implement UmbracoHttpHandler with the code below. The handler is linked up in the media folder's web.config. Everything works fine when the class inherits from IHttpHandler, but when I switch it to inherit from UmbracoHttpHandler as shown below, I start getting Object reference not set to an instance of an object. immediately upon trying to load any media, before it hits any breakpoints in MediaHttpHandler.cs.

    Any ideas what I am doing wrong?

    public class MediaHttpHandler : UmbracoHttpHandler
    {
        public override bool IsReusable => true;
    
        public override void ProcessRequest(HttpContext context)
        {
            string requestedFile = context.Server.MapPath(context.Request.FilePath);
    
            switch (Path.GetExtension(requestedFile))
            {
                case ".jpg":
                    context.Response.ContentType = "image/jpg";
                    break;
    
                // Etc... several more of these.
    
                default:
                    context.Response.ContentType = "text/plain";
                    break;
            }
    
            if (requestedFile != null)
            {
                context.Response.TransmitFile(requestedFile);
                context.Response.End();
            }
            else
            {
                context.Response.StatusCode = 404;
            }
        }
    }
    
  • Søren Gregersen 441 posts 1884 karma points MVP 2x c-trib
    Aug 13, 2019 @ 04:44
    Søren Gregersen
    0

    Does it fail if you remove all your code from the class, and only have the class definition?

    public class MediaHttpHandler : UmbracoHttpHandler {}
    

    PS. you dont inherit from an interface, you implement it :-)

  • David Zweben 268 posts 754 karma points
    Aug 13, 2019 @ 13:12
    David Zweben
    0

    Hi Søren,

    You're right; both UmbracoHttpHandler and IHttpHandler are 'implemented', actually, because UmbracoHttpHandler is an abstract class.

    I can't have a completely empty implementation because UmbracoHttpHandler is abstract, but I tried the simplest implementation possible (shown below), and I still get Object reference not set to an instance of an object. before I hit any breakpoints in the class:

    using System.Web;
    using Umbraco.Web;
    
    public class MediaHttpHandler : UmbracoHttpHandler
    {
        public override bool IsReusable => true;
    
        public override void ProcessRequest(HttpContext context)
        {
            throw new System.NotImplementedException();
        }
    }
    

    As soon as I switch it to implement IHttpHandler instead, as shown below, it starts working normally:

    using System.Web;
    using Umbraco.Web;
    
    public class MediaHttpHandler : IHttpHandler
    {
        public bool IsReusable => true;
    
        public void ProcessRequest(HttpContext context)
        {
            throw new System.NotImplementedException();
        }
    }
    

    Any suggestions would be appreciated!

  • David Zweben 268 posts 754 karma points
    Aug 13, 2019 @ 13:17
    David Zweben
    100

    Since this seemed to be a bug, I searched the issue tracker and found this issue, which seems likely to be what I'm running into:

    https://github.com/umbraco/Umbraco-CMS/issues/6018

    Therefore, I'll move my discussion over to there.

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies