首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MVC 2中尝试使用自定义错误时出现的几个错误

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

Stack Overflow用户
提问于 2011-04-23 01:43:43
回答 1查看 174关注 0票数 1

在MVC 2中尝试使用自定义404和500个错误页时,我遇到了一些错误。

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

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

将以下路由最后一个放置在我的路由表中:

代码语言:javascript
复制
routes.MapRoute(
    null,
    "{*path}",
    new { controller = "Error", action = "Http404" }
);

并创建了以下控制器:

代码语言:javascript
复制
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中打开自定义错误。我不知道我错过了什么,或者我是否走上了正确的轨道。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-25 19:56:35

使用Http 500错误时,您可能会得到默认页面,因为您将HandleError属性应用于控制器。您可以在属性中为您希望指向的错误类型指定一个视图,但是对于处理HttpException的错误类型还没有很好的开发。如果您从控制器中删除了这个属性,默认的asp.net内容应该会接管。您还可以在基本控制器中重写OnException

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

这是一个困难的问题,你也可以找到更多的信息这里

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5761573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档