【问题标题】:A couple of errors when trying to use custom errors in MVC 2尝试在 MVC 2 中使用自定义错误时出现几个错误
【发布时间】:2011-04-23 01:43:43
【问题描述】:

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

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

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

在我的路由表中放置了以下路由last

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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


    有点挑剔,但我也强烈建议只在继承ActionResult 的类的.Execute() 方法中设置Response.StatusCode。从概念上讲,操作的结果是应该构建响应的代码部分,并且在 ActionResult 之外实现部分代码,就像您在控制器中所做的那样,很容易导致很难找到错误。我知道 MVC2 附带的 HttpStatusCodeResult 不允许您选择要随结果一起返回的视图,但是滚动您自己从 ViewResult 继承的内容相当简单。

    【讨论】:

    • 嗯.. 看起来 customErrors 完全忽略了我的控制器。删除 [HandleError] 会使所有路由错误告诉我打开 customErrors。我已经在 Http404 的 View 调用中添加了命名参数,并且 intellisense 告诉我它被作为 View(string, object) 调用,就像它应该的那样,但同样的错误仍然存​​在。
    • 看起来我想要的是 ResponseRedirect 而不是 ResponseRewrite
    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 2019-11-09
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多