MVC5自定义HandleErrorAttribute需要检测是否将部分视图返回到ajax调用

时间:2014-04-15 19:59:12

标签: ajax exception-handling asp.net-mvc-5 asp.net-mvc-partialview jsonresult

我已经创建了一个自定义HandleErrorAttribute,以便在异常处理过程中实现日志记录。但是,与日志记录无关,我遇到了一个问题,我需要在Ajax请求而不是JsonResult上呈现部分视图。我可以检测到它是一个ajax请求,但我无法弄清楚如何确定何时适合生成JsonResult或PartialView。在大多数情况下,JsonResult是合适的,但在某些情况下,PartialView是合适的。有没有办法确定OnException()中的操作是什么?

2 个答案:

答案 0 :(得分:0)

我希望找到一种通过filterContext中的属性检测所需响应类型的方法,或者允许我动态确定预期响应类型的方法。在我的所有研究中,我找不到任何能够实现这一目标的东西。因此,我通过向自定义HandleErrorAttribute类添加bool属性(默认为false)来处理这种情况。然后,我将此属性应用于使用partialView而不是JsonResult进行响应的方法,将属性值设置为true。当属性值为true时,OnException()方法使用partialView而不是JsonResult进行响应。

如果有更好的方法,请告诉我。

答案 1 :(得分:0)

我认为以下代码段可以帮助您检测所需的响应类型

protected override void OnException(ExceptionContext filterContext)
{
    //Determine the return type of the action
    string actionName = filterContext.RouteData.Values["action"].ToString();
    Type controllerType = filterContext.Controller.GetType();
    var method = controllerType.GetMethod(actionName);
    var returnType = method.ReturnType;

    if (returnType.Equals(typeof(JsonResult)))
    {
    }
}