Asp.net mvc 5 如何从JsonResult控制器返回404?

Asp.net mvc 5 如何从JsonResult控制器返回404?,asp.net-mvc-5,jsonresult,Asp.net Mvc 5,Jsonresult,在ASP.NET MVC5中,我有一个返回类型为JsonResult的控制器 根据参数,我想返回404,因为这是对请求不存在数据的用户的描述 我可以抛出新的HttpException(404,“message”),但考虑到返回HttpNotFound()语法,这感觉很糟糕。当然,这不起作用,因为HttpNotFoundResult不会继承JsonResult 我应该如何从JsonResult控制器方法干净地返回404?您的所有操作都应该具有ActionResult返回值。这允许您返回任何有效的结

在ASP.NET MVC5中,我有一个返回类型为
JsonResult
的控制器

根据参数,我想返回404,因为这是对请求不存在数据的用户的描述

我可以
抛出新的HttpException(404,“message”)
,但考虑到
返回HttpNotFound()
语法,这感觉很糟糕。当然,这不起作用,因为
HttpNotFoundResult
不会继承
JsonResult


我应该如何从
JsonResult
控制器方法干净地返回404?

您的所有操作都应该具有
ActionResult
返回值。这允许您返回任何有效的结果类型,无论是
JsonResult
还是
HttpNotFoundResult

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

    return Json(foos, JsonRequestBehavior.AllowGet);
}

我会小心地说他们“应该”,因为这确实是一个风格和必要性的问题。争论所有操作都应该返回ActionResult就像争论所有方法都应该返回
对象