Search code examples
asp.net-mvc-5jsonresult

How should I return 404 from a JsonResult Controller?


In ASP.NET MVC5 I have a controller with a JsonResult return type.

Depending on parameters I want to return a 404, as this is descriptive of the user requesting non-existent data.

I could throw new HttpException(404, "message") but this feels dirty given the return HttpNotFound() syntax. This doesn't work, of course, because HttpNotFoundResult does not inherit JsonResult

How should I cleanly return 404's from JsonResult controller methods?


Solution

  • All your actions should simply have ActionResult return values. This allows you to return any valid result type, whether that's a JsonResult or HttpNotFoundResult.

    public ActionResult Foo()
    {
        if (!foos.Any())
        {
            return new HttpNotFoundResult();
        }
    
        return Json(foos, JsonRequestBehavior.AllowGet);
    }