将Json actionresult和HttpStatusCodeResult都作为可能的结果,但只有一个返回

时间:2018-04-26 12:55:32

标签: c# asp.net asp.net-mvc

我喜欢用一个return语句来设计我的方法,原因有很多(我认为这是最佳实践)。

但是我怎么能有一个mvc控制器actionresult创建一个结果对象,我可以将HttpStatusCodeResult和普通的Json结果放在一起?

他们都继承自ActionResult。

修改 我现在拥有的一个例子,但想改成只有1个返回语句,就像这样:

4

2 个答案:

答案 0 :(得分:4)

您可以继承并扩展添加Http状态代码的JsonResult类。

public class JsonHttpStatusResult : JsonResult
{
    private readonly HttpStatusCode _httpStatus;

    public JsonHttpStatusResult(object data, HttpStatusCode httpStatus)
    {
        Data = data;
        _httpStatus = httpStatus;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.RequestContext.HttpContext.Response.StatusCode = (int)_httpStatus;
        base.ExecuteResult(context);
    }
}

现在你可以在非错误条件下像普通Jsonresult一样使用它,在错误条件下,它可以是:

var errorModel = new { error = "There was an error" };
    return new JsonHttpStatusResult(errorModel, HttpStatusCode.InternalServerError);

答案 1 :(得分:1)

您只需发送响应代码以及您的回复:

Response.StatusCode = Convert.ToInt32(System.Net.HttpStatusCode.InternalServerError);

return Json(new { Data = carrots }, JsonRequestBehavior.AllowGet);