如何从HandleError过滤器返回JSON?
时间:2020-03-06 14:29:50 来源:igfitidea点击:
aspnet mvc具有HandleError过滤器,如果发生错误,该过滤器将返回视图,但是如果在调用JsonResult Action时发生错误,如何返回代表错误的JSON对象?
我不想在尝试/捕获中返回JsonResult的每个操作方法中包装代码来完成它,我宁愿通过添加'HandleJsonError'属性或者将现有的HandleError属性添加到所需的操作方法中来完成此操作。
解决方案
也许我们可以创建自己的Attribute并具有一个构造函数值,该构造函数值应使用View或者Json的枚举值。以下是我用于自定义授权属性的内容,以演示我的意思。这样,当对JSON请求的身份验证失败时,它将以json错误进行响应,如果返回View,则以相同的方式进行响应。
public enum ActionResultTypes { View, Json } public sealed class AuthorizationRequiredAttribute : ActionFilterAttribute, IAuthorizationFilter { public ActionResultTypes ActionResultType { get; set; } public AuthorizationRequiredAttribute(ActionResultTypes actionResultType) { this.ActionResultType = ActionResultType; } } //And used like [AuthorizationRequired(ActionResultTypes.View)] public ActionResult About() { }
看一下HandleErrorAttribute的MVC实现。它返回一个ViewResult。我们可以编写自己的版本(HandleJsonErrorAttribute),该版本返回JsonResult。