为了账号安全,请及时绑定邮箱和手机立即绑定

如何使自定义错误页在ASP.NETMVC 4中工作

如何使自定义错误页在ASP.NETMVC 4中工作

噜噜哒 2019-07-08 15:46:23
如何使自定义错误页在ASP.NETMVC 4中工作我希望为500,404和403显示一个自定义错误页面。以下是我所做的:已启用web.config中的自定义错误,如下所示:<customErrors mode="On"                defaultRedirect="~/Views/Shared/Error.cshtml">     <error statusCode="403"             redirect="~/Views/Shared/UnauthorizedAccess.cshtml" />     <error statusCode="404"             redirect="~/Views/Shared/FileNotFound.cshtml" /></customErrors>注册HandleErrorAttribute中的全局操作筛选器。FilterConfig类别如下:public static void RegisterGlobalFilters(GlobalFilterCollection filters){     filters.Add(new CustomHandleErrorAttribute());     filters.Add(new AuthorizeAttribute());}为上述每条消息创建自定义错误页。500的默认选项已经可用。在每个自定义错误页视图中声明为System.Web.Mvc.HandleErrorInfo对于500,它显示自定义错误页面。对其他人来说并非如此。我遗漏了什么吗?这看起来并不是显示自定义错误的全部内容,因为我在OnException方法HandleErrorAttribute类,并且它仅处理500个。我要怎么做才能处理其他错误?
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

我的当前设置(在MVC 3上,但我认为它仍然适用)依赖于有一个ErrorController,所以我用:

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error">
      <error redirect="~/Error/NotFound" statusCode="404" />
    </customErrors></system.web>

控制器包含以下内容:

public class ErrorController : Controller{
    public ViewResult Index()
    {
        return View("Error");
    }
    public ViewResult NotFound()
    {
        Response.StatusCode = 404;  //you may want to set this to 200
        return View("NotFound");
    }}

视图就是你实现它们的方式。不过,我倾向于添加一些逻辑,以便在应用程序处于调试模式时显示堆栈跟踪和错误信息。所以Error.cshtml看起来如下所示:

@model System.Web.Mvc.HandleErrorInfo
@{
    Layout = "_Layout.cshtml";
    ViewBag.Title = "Error";
}<div class="list-header clearfix">
    <span>Error</span></div><div class="list-sfs-holder">
    <div class="alert alert-error">
        An unexpected error has occurred. Please contact the system administrator.    </div>
    @if (Model != null && HttpContext.Current.IsDebuggingEnabled)
    {        <div>
            <p>
                <b>Exception:</b> @Model.Exception.Message<br />
                <b>Controller:</b> @Model.ControllerName<br />
                <b>Action:</b> @Model.ActionName            </p>
            <div style="overflow:scroll">
                <pre>
                    @Model.Exception.StackTrace                </pre>
            </div>
        </div>
    }</div>


查看完整回答
反对 回复 2019-07-08
?
慕森王

TA贡献1777条经验 获得超3个赞

我做了巴勃罗的解决方案,我总是有错误(MVC4)

未找到视图“错误”或其母版,或者没有视图引擎支持搜索的位置。

为了摆脱这个,拆线

 filters.Add(new HandleErrorAttribute());

在FilterConfig.cs中


查看完整回答
反对 回复 2019-07-08
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

我所做的事情,需要比其他解决方案更少的编码张贴。

首先,在我的web.config中,我有以下内容:

<customErrors mode="On" defaultRedirect="~/ErrorPage/Oops">
   <error redirect="~/ErrorPage/Oops/404" statusCode="404" />
   <error redirect="~/ErrorPage/Oops/500" statusCode="500" /></customErrors>

控制器(/Controller/ErrorPageController.cs)包含以下内容:

public class ErrorPageController : Controller{
    public ActionResult Oops(int id)
    {
        Response.StatusCode = id;

        return View();
    }}

最后,视图包含以下内容(为简化,但它可以包含以下内容:

@{ ViewBag.Title = "Oops! Error Encountered"; }


<section id="Page">

  <div class="col-xs-12 well">

    <table cellspacing="5" cellpadding="3" style="background-color:#fff;width:100%;" class="table-responsive">

      <tbody>

        <tr>

          <td valign="top" align="left" id="tableProps">

            <img width="25" height="33" src="~/Images/PageError.gif" id="pagerrorImg">

          </td>

          <td width="360" valign="middle" align="left" id="tableProps2">

            <h1 style="COLOR: black; FONT: 13pt/15pt verdana" id="errortype"><span id="errorText">@Response.Status</span></h1>

          </td>

        </tr>

        <tr>

          <td width="400" colspan="2" id="tablePropsWidth"><font style="COLOR: black; FONT: 8pt/11pt verdana">Possible causes:</font>

          </td>

        </tr>

        <tr>

          <td width="400" colspan="2" id="tablePropsWidth2">

            <font style="COLOR: black; FONT: 8pt/11pt verdana" id="LID1">

                            <hr>

                            <ul>

                                <li id="list1">

                                    <span class="infotext">

                                        <strong>Baptist explanation: </strong>There

                                        must be sin in your life. Everyone else opened it fine.<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Presbyterian explanation: </strong>It's

                                        not God's will for you to open this link.<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong> Word of Faith explanation:</strong>

                                        You lack the faith to open this link. Your negative words have prevented

                                        you from realizing this link's fulfillment.<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Charismatic explanation: </strong>Thou

                                        art loosed! Be commanded to OPEN!<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Unitarian explanation:</strong> All

                                        links are equal, so if this link doesn't work for you, feel free to

                                        experiment with other links that might bring you joy and fulfillment.<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Buddhist explanation:</strong> .........................<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Episcopalian explanation:</strong>

                                        Are you saying you have something against homosexuals?<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Christian Science explanation: </strong>There

                                        really is no link.<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Atheist explanation: </strong>The only

                                        reason you think this link exists is because you needed to invent it.<br>

                                    </span>

                                </li>

                                <li>

                                    <span class="infotext">

                                        <strong>Church counselor's explanation:</strong>

                                        And what did you feel when the link would not open?

                                    </span>

                                </li>

                            </ul>

                            <p>

                                <br>

                            </p>

                            <h2 style="font:8pt/11pt verdana; color:black" id="ietext">

                                <img width="16" height="16" align="top" src="~/Images/Search.gif">

                                HTTP @Response.StatusCode - @Response.StatusDescription <br>

                            </h2>

                        </font>

          </td>

        </tr>

      </tbody>

    </table>

  </div>

</section>

运行代码段展开片段

就这么简单。它可以很容易地扩展到提供更详细的错误信息,但是ELMAH为我处理这个问题&StatusCode&StatusDescription是我通常需要的。



查看完整回答
反对 回复 2019-07-08
  • 3 回答
  • 0 关注
  • 274 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信