首页 新闻 会员 周边

mvc验证,如何在OnAuthorization(AuthorizationContext filterContext)过程中获取Action的返回值类型?

1
悬赏园豆:20 [已解决问题] 解决于 2014-11-24 15:05

小弟做了一个mvc的验证,有的Action返回的是json,有的是普通的view

验证失败的时候,我想根据Action的返回值类型做不同的操作

比如,如果 Action 的返回值是json,我就直接输出个错误信息,返回值是view的话,就做个跳转操作。

 

在局部变量视图里面,可以看到filterContext.ActionDescriptor 里面有个 System.Web.Mvc.ReflectedActionDescriptor 但不是公共成员,访问不到...

 

ssboy的主页 ssboy | 初学一级 | 园豆:122
提问于:2014-11-20 10:07
< >
分享
最佳答案
0

filterContext有ActionName和Controller实例,可以反射得到名为ActionName的方法:

           var actionMaethod = filterContext.Controller
                .GetType()
                .GetMethod(filterContext.ActionDescriptor.ActionName);

            if (actionMaethod.ReturnType == typeof(ViewResult))
            {
                //ViewResult
            }

 

上面是可行,但我不觉得这是好思路,你可以换一种思维来思考这个问题,下面给你另一种思路:

           if (filterContext.HttpContext.Request.IsAjaxRequest())
            {
                //Ajax 输出错误信息给脚本吧
            }
            else
            {
                filterContext.Result = new RedirectResult("/login");
            }
收获园豆:15
jiulang | 菜鸟二级 |园豆:437 | 2014-11-21 22:41

真是太感谢了,还不知道有个IsAjaxRequest方法呢,哈哈哈...

ssboy | 园豆:122 (初学一级) | 2014-11-24 15:05
其他回答(1)
0

这里有个问题。你的验证是否在OnActionExecuting 里进行,如果在这里你的返回类型是不确定的,return View 或 return Json 并未执行,如果你的验证是在OnResultExecuted 里进行。这样可能达不到验证的目的!

收获园豆:5
徐小朝 | 园豆:211 (菜鸟二级) | 2014-11-20 11:10

我是在声明Action的时候就指定了返回值类型了         public JsonResult MobileCode(MobileViewModel vm)

支持(0) 反对(0) ssboy | 园豆:122 (初学一级) | 2014-11-20 15:45

@ssboy: 如果你只是想取 JsonResult 你可以使用反射方法来取得当前Action的返回类型。关于反射你可以在网上找一些资料

支持(0) 反对(0) 徐小朝 | 园豆:211 (菜鸟二级) | 2014-11-20 17:27
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册