【问题标题】:How to return error status in JsonResult in Asp.Net Core?如何在 Asp.Net Core 的 JsonResult 中返回错误状态?
【发布时间】:2020-02-14 14:44:10
【问题描述】:

我在将 Asp.Net MVC 5 应用程序迁移到 Core 版本后尝试返回错误状态。

在我的旧应用程序中,我使用了一个继承自 JsonResult 的类 (JsonHttpStatusResult),并返回了一个 catch 错误(如果有)。但是,当尝试将其添加到新项目时,不幸的是它不再具有某些功能。

我想对 Asp.Net Core 版本使用相同的概念,因为如果JsonResult 中发生错误,我不想返回 true 或 false。以下是它在 MVC 5 中如何工作的示例:

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 上的示例

public JsonResult Example()
{
    try
    {
        //Some code
        return Json(/*something*/);
    }
    catch (Exception ex)
    {
        return new JsonHttpStatusResult(ex.Message, HttpStatusCode.InternalServerError);
    }
}

AJAX 请求

$.ajax({
    url: "/Something/Example",
    type: "POST",
    dataType: "json",
    success: function (response) {
        //do something
    },
    error: function (xhr, ajaxOptions, thrownError) {
         //Show error
    }
});

如何在 Asp.Net Core 中执行此操作或类似操作?

【问题讨论】:

    标签: asp.net-core asp.net-ajax


    【解决方案1】:

    您不必在 ASP.NET Core 中创建自己的实现。

    ASP.NET Core 为JsonResult 类引入了一个新的StatusCode Property

    所以只需将您的代码更改为:

    捕捉(例外前) { 返回新的 JsonResult(ex.Message){ StatusCode = (int)HttpStatusCode.InternalServerError }; }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-13
      • 1970-01-01
      • 2023-02-25
      • 2017-07-10
      • 1970-01-01
      • 2023-02-19
      • 2020-05-29
      • 2011-03-08
      相关资源
      最近更新 更多