c# - 返回带有错误状态码 MVC 的 JSON

标签 c# asp.net-mvc json

我试图按照中的建议将错误返回给对 Controller 的调用 This link以便客户可以采取适当的行动。 Controller 由 javascript 通过 jquery AJAX 调用。只有当我没有将状态设置为错误时,我才会返回 Json 对象。 这是示例代码

if (response.errors.Length > 0)
   Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(response);

如果我不设置状态码,我会得到 Json。 如果我设置状态码,我会返回状态码,但不会返回 Json 错误对象。

更新 我想将一个错误对象作为 JSON 发送,以便可以处理 ajax 的错误回调。

最佳答案

我发现的最简洁的解决方案是创建您自己的 JsonResult,它扩展了原始实现并允许您指定 HttpStatusCode:

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);
    }
}

然后您可以像这样在 Controller 操作中使用它:

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

关于c# - 返回带有错误状态码 MVC 的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11370251/

相关文章:

c# - 接口(interface)实现理念

c# - ASP.NET WindowsAuthentication 自定义 401 未授权错误页面

json - 同意矩阵(2D)如何存储为 JSON?

c# - 如何将具有动态值的 javascript 对象发布到 mvc6 Controller 操作

asp.net-mvc - NGEN 可以与 Azure 网站一起使用吗?

javascript - .click 将一段 json 添加到面板中

c# - 等效于没有单独参数的 Process.Start()

c# - 我应该将通用存储库与 Entity Framework 5 一起使用吗?

c# - 将点从一个三角形变换到另一个三角形

asp.net - 是否有一种模式可以用来编辑 MVC3 应用程序中的下拉列表?