尝试在MVC 2中使用自定义错误时出现两个错误

时间:2011-04-23 01:43:44

标签: asp.net-mvc-2 custom-errors

我在尝试在MVC 2中使用自定义404和500错误页面时遇到了一些错误。我基本上是在尝试实现我在此处找到的内容:http://www.genericerror.com/blog/2009/01/27/ASPNetMVCCustomErrorPages.aspx到目前为止,我有:

在我的Web.config中放置以下行:

<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Error/Http500" />

在我的路线表中放置以下路线最后

routes.MapRoute(
    null,
    "{*path}",
    new { controller = "Error", action = "Http404" }
);

然后,创建了以下控制器:

public class ErrorController : Controller
{
    //
    // GET: /Error/Http500

    public ActionResult Http500()
    {
        Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        return View("my500");
    }

    //
    // GET: /Error/Http404/Path

    public ActionResult Http404(string path)
    {
        Response.StatusCode = (int)HttpStatusCode.NotFound;
        return View("my404", path);
    }
}

所有这些,对于500个错误,my500视图没有被渲染。相反,它看起来像是再次显示通用的默认Error.aspx视图。对于404错误,我收到YSOD告诉我在我的Web.config中打开自定义错误。我不确定我错过了什么,或者我是否走在正确的轨道上。

编辑:两个视图都在视图/共享

1 个答案:

答案 0 :(得分:1)

如果出现Http 500错误,您可能会获得默认页面,因为您的控制器已应用HandleError属性。您可以在HandleError attribute中为要在其中指定的错误类型指定一个视图,但在处理HttpException时却没有很好的开发。如果从控制器中删除此属性,则默认的asp.net内容应该接管。您也可以覆盖基本控制器中的OnException

Http 404错误,there is an overload for return View(string, string);您无意中使用了这些错误。将路径转换为对象(meh)或使用命名参数(hooray),它将使用路径作为视图的模型。现在它认为这是您要使用的母版页的名称。

这是一个难题,您还可以找到更多信息here


有点挑剔,但我 HIGHLY 建议仅在继承Response.StatusCode的类的.Execute()方法中设置ActionResult。从概念上讲,操作的结果是应该构建响应的代码的一部分,并且在ActionResult之外实现部分,就像在控制器中执行的那样,很容易导致很难找到错误。我知道MVC2附带的HttpStatusCodeResult不允许您选择一个视图与结果一起返回,但是从ViewResult推送自己的继承是非常简单的。