如何从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。