我有一个自定义属性,代码如下:
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
对此的任何见解将不胜感激。谢谢!
答案 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)