1

尝试在 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 中打开自定义错误。我不确定我错过了什么,或者我是否在正确的轨道上。

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

4

1 回答 1

1

对于 Http 500 错误,您可能会获得默认页面,因为您有一个HandleError属性应用于您的控制器。HandleError您可以在属性中为您希望定向到那里的错误类型指定一个视图,但对于处理HttpExceptions并没有很好的开发。如果你从你的控制器中删除这个属性,默认的 asp.net 东西应该会接管。您也可以OnException在基本控制器中覆盖。

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

这是一个难题,您还可以在此处找到更多信息。


有点挑剔,但我也强烈建议只在继承的类Response.StatusCode的方法中设置。从概念上讲,动作的结果是应该构建响应的代码部分,而在. 我知道MVC2 附带的不允许您选择与结果一起返回的视图,但是滚动您自己的继承自..Execute()ActionResultActionResultHttpStatusCodeResultViewResult

于 2011-04-25T19:56:35.107 回答