zoukankan      html  css  js  c++  java
  • MVC 避免黄页

    可以使用HandleErrorAttribute

    有两种方式可以使用它,在类或者方法的头上加 [HandleError] 

    这种直接在类或者方法上加[HandlerError]手动添加

    另外一种方式是使用Global Filters功能来注册,默认的mvc3.0以上都在Global.asax文件已经默认在新建的mvc项目的这个文件已经添加

      public static void RegisterGlobalFilters(GlobalFilterCollection filters)
            {
                //整个程序所有控制器都使用HandlerError来处理错误
                //不过它只处理500系列错误,404类型需要单独处理
                filters.Add(new HandleErrorAttribute());
            }

    下一步:需要开启根目录的web.config下customErrors节点(是根目录,不是views目录下的web.config)

    在web.config文件的  <system.web>节点里:

    <customerrors mode="On" defaultredirect="~/Error/HttpError">
    <error redirect="~/Error/NotFound" statuscode="404" />
    </customerrors>

    注意:defaultredirect 定义的是所有错误页面转向的错误页面地址,而error 节点元素就是单独定义不同的错误页面转向地址,上面的error行就是定义的404类型转向的地址

    最后一件事:定义具体错误页面ErrorController

    public class ErrorController : Controller
        {
            public ActionResult HttpError()
            {
                return View("Error");
            }
            public ActionResult NotFound()
            {
                return View();
            }
            public ActionResult Index()
            {
                return RedirectToAction("Index", "Home");
            }
        }

    可以修改~/Views/Shared/Error.cshtml

    @model System.Web.Mvc.HandleErrorInfo
    @{
    ViewBag.Title = "General Site Error";
    }

    <h2>A General Error Has Occurred</h2>

    @if (Model != null)
    {
    <p>
    @Model.Exception.GetType().Name<br />
    thrown in @Model.ControllerName @Model.ActionName
    </p>
    <p>Error Details:</p>
    <p>@Model.Exception.Message</p>
    }

     另外也可以通过传递参数来重写GlobalFilter里的HandleErrorAttribte注册,单独声明一个特定的Exception,并且带有Order参数,当然也可以连续声明多个,这样就会多次处理。

    例如:

    //也可以通过传递参数来重写GlobalFilter里的HandleErrorAttribte注册,单独声明一个特定的Exception,并且带有Order参数,当然也可以连续声明多个,这样就会多次处理

    filters.Add(new HandleErrorAttribute()
    {
    Order = 2,
    //这个view是shared目录下的view,表示通用共享
    View = "OtherView",
    ExceptionType = typeof(YourExceptionHere)
    });

  • 相关阅读:
    困扰程序员的30种软件开发问题,你是否时曾相识?
    一位阿里架构师给每个程序员的小建议
    一位阿里架构师给每个程序员的小建议
    一位阿里架构师给每个程序员的小建议
    MongoDB常用语句
    MongoDB常用语句
    ACM2055_ctype.h_cctype
    Serverless 每周小报-20190610
    linux-深度学习环境配置-Centos
    2018 ACM 国际大学生程序设计竞赛上海大都会赛
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5643448.html
Copyright © 2011-2022 走看看