加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

尽管指定了我自己的视图,ASP.NET MVC3仍然会查找Error.aspx / .c

发布时间:2020-12-16 09:50:39 所属栏目:asp.Net 来源:网络整理
导读:我将ASP.NET MVC 3应用程序配置为使用两个操作重定向到Errors控制器 – customErrors mode="On" defaultRedirect="/Errors/ApplicationError" error statusCode="404" redirect="/Errors/NotFound" //customErrors 我有几个从每个动作方法呈现的视图: /View
我将ASP.NET MVC 3应用程序配置为使用两个操作重定向到Errors控制器 –

<customErrors mode="On" defaultRedirect="/Errors/ApplicationError">
    <error statusCode="404" redirect="/Errors/NotFound" />
</customErrors>

我有几个从每个动作方法呈现的视图:

> /Views/Shared/NotFound.cshtml
> /Views/Shared/ApplicationError.cshtml

在我的ErrorsController ApplicationError操作中,我执行以下操作:

public ActionResult ApplicationError()
{
    Response.StatusCode = 500;
    return View();
}

这有效,我的ApplicationError.cshtml视图被渲染,无论发生什么异常都记录下来,一切都很好.

但是在ELMAH中我看到记录了这个额外的错误:

System.InvalidOperationException
The view ‘Error’ or its master was not found or no view engine supports the searched locations. The following locations were searched: ~/Views/Throw/Error.aspx ~/Views/Throw/Error.ascx ~/Views/Shared/Error.aspx ~/Views/Shared/Error.ascx ~/Views/Throw/Error.cshtml ~/Views/Throw/Error.vbhtml ~/Views/Shared/Error.cshtml ~/Views/Shared/Error.vbhtml

当我已经处理错误并且我自己的视图被成功定位并呈现时,为什么ASP.NET MVC仍然在寻找这些视图?

附加信息:

>我不在任何地方使用[HandleError]属性
>我替换了filters.Add(new HandleErrorAttribute());在Global.asax.cs中使用filters.Add(new ElmahHandleErrorAttribute());根据this advice,由Atif author of ELMAH基于此Stack Overflow answer.

解决方法

我认为,虽然您已使用派生类(ElmahHandleErrorAttribute)替换了HandleErrorAttribute,但您的自定义属性的OnException可能仍在调用base.OnException – 即HandleErrorAttribute.OnException.

HandleErrorAttribute.OnException完全忽略web.config设置(除非让customErrors关闭,让ASP.NET显示标准YSOD),并将操作结果设置为状态代码为500的ViewResult,并将View设置为“Error”(默认情况下,尚未在属性上设置View属性).

即,我猜这样的事情发生了:

>你抛出一个例外
> ElmahHandleErrorAttribute选择它,记录异常,调用base.OnException
> HandleErrorAttribute.OnException将操作的结果设置为ViewResult,并将View设置为“Error”
> ViewEngine无法找到此“错误”视图,因此抛出新的异常
> …由ELMAH记录,但未被ElmahHandleErrorAttribute记录(因为此异常发生在动作之外)
>相反,ASP.NET本身会选择它,并使用web.config中的errorPages
> …调用/错误/ ApplicationError
> …显示您想要的视图

…但实际上并不是你抛出的异常,而是ViewEngine抛出的异常.

如果希望遵循web.config设置,您可能希望实现自己的异常处理,而不是基于HandleError.看看MVC源代码中的HandleErrorAttribute(here),看看需要做什么(以及在你的情况下不应该做什么).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读