Как вернуть статус ошибки в JsonResult в Asp.Net Core? - PullRequest
0 голосов
/ 17 октября 2019

Я пытаюсь вернуть состояние ошибки после переноса приложения Asp.Net MVC 5 в версию Core.

В моем старом приложении я использовал класс (JsonHttpStatusResult), который наследуется от JsonResultи вернул ошибку перехвата, если таковая имеется. Тем не менее, при попытке добавить это в новый проект, к сожалению, у него больше нет некоторых функций.

Я хотел бы использовать эту же концепцию для версии Asp.Net Core, потому что я не хочувернуть true или false , если в JsonResult возникает ошибка. Ниже приведен пример того, как он работал в MVC 5:

CLASS :

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 REQUEST :

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

Как сделать это или нечто подобное в Asp.Net Core?

1 Ответ

0 голосов
/ 18 октября 2019

Вам не нужно создавать собственную реализацию в ASP.NET Core.

В ASP.NET Core добавлено новое StatusCode свойство для JsonResult класса.

Поэтому просто измените свой код на:

catch (Exception ex)
{
    return new JsonResult(ex.Message){
        <b>StatusCode = (int)HttpStatusCode.InternalServerError</b>
    };
}
...