如何在ASP.NET MVC4中启用customErrors模式?

3
我是一个对ASP.NET MVC4非常新的学习者,正在学习相关课程。我在错误处理方面遇到了一些小问题。当教练在web.config文件中的标签下添加时,他被重定向到友好的错误页面(而不是堆栈跟踪)。
当我做出这个改变时,我仍然被重定向到"黄色死亡页面"的堆栈跟踪。
由于我正在努力尽可能深入地理解这个问题,所以我想在这里问一下。为什么把打开可以让教练成功而我失败了呢?
以下是我的标签:
<system.web>

    <customErrors mode="On"/>

    <httpHandlers>
      <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
    </httpHandlers>
    <pages
        validateRequest="false"
        pageParserFilterType="System.Web.Mvc.ViewTypeParserFilter, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        pageBaseType="System.Web.Mvc.ViewPage, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
        userControlBaseType="System.Web.Mvc.ViewUserControl, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <controls>
        <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" namespace="System.Web.Mvc" tagPrefix="mvc" />
      </controls>
    </pages>

</system.web>

这是我的Global.asax.cs代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;

namespace OdeToFood
{
    // Note: For instructions on enabling IIS6 or IIS7 classic mode, 
    // visit http://go.microsoft.com/?LinkId=9394801

    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            WebApiConfig.Register(GlobalConfiguration.Configuration);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterAuth();
        }
    }
}

最后,是我的FilterConfig.cs文件。
using System.Web;
using System.Web.Mvc;

namespace OdeToFood
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            filters.Add(new HandleErrorAttribute());
        }
    }
}

我目前使用的是默认视图Error.cshtml。

我还尝试过以下方法:

<customErrors mode="On" defaultRedirect="Error"/>

以及

<customErrors mode="On" defaultRedirect="~/Error.cshtml"/>

我正在使用以下代码来强制出错:

    public class CuisineController : Controller
    {
        //
        // GET: /Cuisine/
        public ActionResult Search(string name = "french")
        {

            throw new Exception("Something terrible has happened");

            var message = Server.HtmlEncode(name);

            return Content(message);
        }
    }
}

您可以看出来,我非常新手,如果这是一个琐碎的问题,请原谅,但我尽力学习。

1个回答

4

您仍需要创建一个错误页面。例如:

Web.config


(Note:此处为HTML标签,无需翻译)
<system.web>
  ...
  <customErrors defaultRedirect="~/Common/Error" mode="On"/>
</system.web>

通用控制器

public class CommonController : Controller
{
    // Error
    public ActionResult Error()
    {
        this.Response.StatusCode = 503;
        this.Response.TrySkipIisCustomErrors = true;

        return View();
    }
}

~/Views/Shared/Error.cshtml

@{
    ViewBag.Title = "Error";
}
<h2>@ViewBag.Title</h2>
<p>
    Error ...
</p>

我已经拥有了那个视图。我使用了预装有错误页面的“互联网应用程序”类型。 - Soulfire
如果您已经有一个错误页面,您需要根据错误页面的位置进行设置。例如,defaultRedirect="~/Common/Error"(不包括cshtml扩展名)。 - Win
我犯了如此简单的疏忽!非常感谢您的回复,看起来我们可以继续了。我还有很多要学习的。 - Soulfire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接