如何更改ExceptionContext自定义属性的重定向视图?

时间:2016-04-01 16:27:43

标签: c# asp.net-mvc

我有一个自定义属性,代码如下:

public override void OnException(ExceptionContext filterContext)
    {
        if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null)
        {
            //If customError is Off, then AI HTTPModule will report the exception
            if (filterContext.HttpContext.IsCustomErrorEnabled)
            {   
                      //Log to AI
            }
        }

        base.OnException(filterContext);
    }

因此,每当发生异常时,它都会运行此属性,该属性将在Application Insights中记录异常。

我的问题是base.OnException正在重定向到默认的“Error”视图,我删除了位于/Shared/Error.cshtml中的默认错误视图,并创建了我自己的错误视图。如何让它重定向到我的自定义错误视图而不是默认错误视图?现在它正在抛出视图错误,因为它找不到默认的错误视图。

System.InvalidOperationException 未找到视图“错误”或其主控,或者没有视图引擎支持搜索的位置。搜索了以下位置:〜/ Views / Shared / Error.aspx~ / Views / Shared / Error.ascx~ / Views / Shared / Error.cshtml~ / Views / Shared / Error.vbhtml

对此的任何见解将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:3)

考虑以下选项:

1 - 您无需更改Error.cshtml文件名,即可更改文件内容。

2 - 您可以通过这种方式将视图名称传递给自定义属性,并使用此属性修饰操作或控制器:

[CustomHandleError(View="SomeView")]

3 - 如果您不想传递视图名称并希望在中心位置使用该名称,则可以这样编写自定义属性并使用以下方式装饰您的操作或控制器[CustomHandleError]

public class CustomHandleError:HandleErrorAttribute
{
    public CustomHandleError():base()
    {
        View = "SomeView";
    }
    //rest of your implementation
}

答案 1 :(得分:0)

您可以在过滤器上下文中更新重定向结果

filterContext.Result = this.RedirectToAction("YourErrorView", "YourErrorController");

 base.OnException(filterContext)