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

C# 如何更改ExceptionContext自定义属性的重定向视图?,c#,asp.net-mvc,C#,Asp.net Mvc,我有一个自定义属性,其代码如下: public override void OnException(ExceptionContext filterContext) { if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null) { //If customError

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

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中的默认Error视图,并创建了自己的Error视图。我如何让它重定向到我的自定义错误视图而不是默认的错误视图?现在它正在抛出视图错误,因为它找不到默认的错误视图

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


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

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

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

 base.OnException(filterContext)

考虑以下选项:

1-您不需要更改
Error.cshtml
文件名,您可以更改文件的内容

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

[CustomHandleError(View="SomeView")]
3-如果您不想传递视图名称,并且希望将名称放在中心位置,您可以这样编写自定义属性,并使用
[CustomHandleError]
装饰动作或控制器:

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

为什么要使用其他文件?只需更改default
Error.cshtml
的内容,我将其保存为我的最后一个选项,我不想这样做的原因是,我们对新自定义错误页面的使用太多,因此我必须在任何地方更改它。我还考虑添加它,并将新的错误页面作为一个部分包含在内,但我也不喜欢这个选项。