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
的内容,我将其保存为我的最后一个选项,我不想这样做的原因是,我们对新自定义错误页面的使用太多,因此我必须在任何地方更改它。我还考虑添加它,并将新的错误页面作为一个部分包含在内,但我也不喜欢这个选项。