asp.net mvc [handleerror] [授权]与JsonResult?

处理来自JavaScript的XHR调用时,利用现有[HandleError]和[Authorize]属性的优雅方式是什么?

所以,比如说一个返回JsonResult的GetJson方法。

当发生错误时,[HandleError]方法将发回一个ViewResult,它将在javascript中的回调函数中回调。

然后我必须在JavaScript中随处放置自定义代码来处理和重定向任何崩溃等。

我想要做的是,如果原始操作计划执行该操作,[HandleError]属性会返回JsonResult。 这可能是我的一厢情愿。

同样,如果未经授权的Json请求进来,而不是返回一个新的HttpUnauthorizedResult,我想返回一个JsonResult,它允许我的客户端代码以一种通用的方式处理事情。

我在这里咆哮错误的树吗? 也许有更好的MVC可以处理这个我不知道的方式?

其他人如何处理这种情况?

谢谢。

PS:我意识到我可以创建自己的[HandleJsonError]和[AuthorizeJson]属性,它返回JsonResults而不是ViewResults,但是我不得不绕过任何返回Json的方法,并且担心Filter的顺序等。如果我可以使用反射或某些具有相同属性的行为取决于原始方法的签名,它肯定会很好。


你没有。 现在,他们对JSON没有帮助。 然而:

我意识到我可以创建自己的[HandleJsonError]和[AuthorizeJson]属性,它们返回JsonResults而不是ViewResults,但是我不得不绕过任何返回Json的方法,并且担心Filter的顺序等。

我们所做的是对现有属性进行子类型分类,并使其有条件工作:

public sealed class AjaxAuthorizeAttribute : AuthorizeAttribute
{
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        base.OnAuthorization(filterContext);
        if (filterContext.Result == null)
        {
            return;
        }
        else if (filterContext.Result.GetType() == typeof(HttpUnauthorizedResult) 
            && filterContext.HttpContext.Request.IsAjaxRequest())
        {
            filterContext.Result = new ContentResult();
            filterContext.HttpContext.Response.StatusCode = 403;
        }
    }
}

现在JS代码可以查找403(因为ASP.NET吃401并返回错误页面),并且相同的属性适用于Ajax和非Ajax。 所以没有过滤器顺序问题。

链接地址: http://www.djcxy.com/p/48139.html

上一篇: asp.net mvc [handleerror] [authorize] with JsonResult?

下一篇: Change default date serialization in WCF