小弟做了一个mvc的验证,有的Action返回的是json,有的是普通的view
验证失败的时候,我想根据Action的返回值类型做不同的操作
比如,如果 Action 的返回值是json,我就直接输出个错误信息,返回值是view的话,就做个跳转操作。
在局部变量视图里面,可以看到filterContext.ActionDescriptor 里面有个 System.Web.Mvc.ReflectedActionDescriptor 但不是公共成员,访问不到...
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"); }
真是太感谢了,还不知道有个IsAjaxRequest方法呢,哈哈哈...
这里有个问题。你的验证是否在OnActionExecuting 里进行,如果在这里你的返回类型是不确定的,return View 或 return Json 并未执行,如果你的验证是在OnResultExecuted 里进行。这样可能达不到验证的目的!
我是在声明Action的时候就指定了返回值类型了 public JsonResult MobileCode(MobileViewModel vm)
@ssboy: 如果你只是想取 JsonResult 你可以使用反射方法来取得当前Action的返回类型。关于反射你可以在网上找一些资料