在将Asp.Net MVC 5应用程序迁移到Core版本后,我试图返回错误状态。
在我的旧应用程序中,我使用了一个从JsonHttpStatusResult
继承的类(JsonResult
),并返回catch错误(如果有)。但是,不幸的是,当尝试将其添加到新项目中时,它不再具有某些功能。
我想对Asp.Net Core版本使用相同的概念,因为如果JsonResult
中发生错误,我不想返回true或false。以下是在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中执行类似操作?
您不必创建自己的实现。 ASP.NET Core中的新JsonResult
具有一个StatusCode
Property 。
因此只需将您的代码更改为:
抓住(前例外){返回新的JsonResult(ex.Message){StatusCode =(int)HttpStatusCode.InternalServerError};}