我如何[HandleError]
在asp.net MVC Preview 5中进行过滤?
我在我的Web.config文件中设置了customErrors
<customErrors mode="On" defaultRedirect="Error.aspx">
<error statusCode="403" redirect="NoAccess.htm"/>
<error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>
Run Code Online (Sandbox Code Playgroud)
并将[HandleError]放在我的Controller类上面,如下所示:
[HandleError]
public class DSWebsiteController: Controller
{
[snip]
public ActionResult CrashTest()
{
throw new Exception("Oh Noes!");
}
}
Run Code Online (Sandbox Code Playgroud)
然后我让我的控制器从这个类继承并在它们上调用CrashTest().视觉工作室在错误时停止并按下f5继续后,我被重新路由到Error.aspx?aspxerrorpath =/sxi.mvc/CrashTest(其中sxi是所用控制器的名称.当然道路无法找到,我得到"'''应用程序中的服务器错误."404.
这个站点从预览3移植到5.除了错误处理之外,所有东西都运行(没有太多工作要移植).当我创建一个完整的新项目时,错误处理似乎有效.
想法?
- 注意 -
由于这个问题现在有超过3K的视图,我认为放入我目前使用的(ASP.NET MVC 1.0)是有益的.在mvc contrib项目中有一个名为"RescueAttribute"的出色属性你也应该检查一下;)
我在ASP.NET MVC工作.我正在使用部分视图,但当我点击特定链接时,我收到以下错误.
500内部服务器错误
如何解决这个错误?
我相信我已经设置了我们的MVC应用程序以便[HandleError]
正确使用.这是我的控制器:
[HandleError]
public class SupportController : BaseController {
public ActionResult Toss() {
throw new Exception("uh oh");
}
// snip
}
Run Code Online (Sandbox Code Playgroud)
我已将我的customErrors
标记设置web.config
为"开启":
<customErrors mode="On"></customErrors>
Run Code Online (Sandbox Code Playgroud)
但是,我仍然在例外情况下获得黄色死亡屏幕.设置在我的断点Toss()
动作表明,HttpContext.IsCustomErrorEnabled
被设置为true.
我们没有对View Engine做任何事情,BaseController
也没有任何混乱(和其他没有扩展它的控制器有相同的问题).
我在Windows XP上开发,并且当应用程序部署到服务器2003框(IIS 6)时会出现同样的问题.
我认为error.aspx
页面上没有异常:
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
</asp:Content>
<asp:Content ID="errorContent" ContentPlaceHolderID="MainContent" runat="server">
<h2>
Sorry, an error occurred while processing your request.
</h2>
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
可能有一点不同的是,这个应用程序是在MVC Beta是最新版本时创建的,并且在它们发布时升级到RC然后升级到RTM.可能有一些怪异的设置从那里遗留下来?
我可以在其他应用程序上工作,所以我有点沮丧.
我正在使用VSC10的MVC 3并试图让[HandleError]工作.我在控制器中创建了一个测试来模拟崩溃,如下所示:
[HandleError]
public ActionResult Crash()
{
throw new ApplicationException();
}
Run Code Online (Sandbox Code Playgroud)
还进入了web.config并添加了:
<customErrors mode="on" />
Run Code Online (Sandbox Code Playgroud)
如果我从Chrome运行,MVC将返回Shared/Error.aspx中的视图,因此这项工作正常.
如果我从IE 8运行,我得到它友好的错误页面("网站无法显示页面,最有可能的原因:......你可以尝试......").我进入IE工具并关闭"显示友好的HTTP错误消息"并再次运行,IE显示我的Error.aspx视图.显然我无法让用户更改此设置,但至少我知道我的Error.aspx正在返回.
所以我运行Fiddler,当我使浏览器转到我的Crash方法时,它显示即使MVC返回我的Error.aspx视图,它也会返回500结果.这会导致IE认为它有错误并使用友好页面覆盖我的页面.
我认为MVC应该返回结果200与我的Error.aspx页面而不是500.任何人都可以给我一些关于尝试什么的想法?