加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

jsonResult的asp.net mvc [handleerror] [authorize]?

发布时间:2020-12-16 19:47:48 所属栏目:百科 来源:网络整理
导读:当处理来自JavaScript的XHR调用时,什么是优化方式来利用现有的[HandleError]和[Authorize]属性? 所以说,例如GetJson方法返回一个JsonResult。 当发生错误时,[HandleError]方法将发回一个ViewResult,它将在javascript中的回调函数中被调用。 然后,我必
当处理来自JavaScript的XHR调用时,什么是优化方式来利用现有的[HandleError]和[Authorize]属性?

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

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

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

我想做的是,如果原来的操作是计划这样做的话,[HandleError]属性返回一个JsonResult。这可能是我的一厢情愿。

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

我在这里骂了错树吗?也许有更好的MVC可以处理这个我不知道的更好的方法?

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

谢谢。

PS:我意识到我可以创建我自己的[HandleJsonError]和[AuthorizeJson]属性,它返回JsonResults而不是ViewResults,但是我必须去把它们放在任何返回Json的方法上,并且担心Filter顺序等等。根据原始方法的签名,如果可以使用反射或某些东西具有不同的属性,那么肯定会很好。

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

I realize I can create my own [HandleJsonError] and [AuthorizeJson] attributes which return JsonResults instead of ViewResults,but then I’d have to go around and place these on any method that returns Json,and worry about Filter order etc.

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

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。所以没有过滤器顺序问题。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读