【问题标题】:Custom error page use filter action mvc自定义错误页面使用过滤器动作 mvc
【发布时间】:2018-01-14 06:53:13
【问题描述】:

我的应用程序使用 MVC4Entity Framework 6。我希望自定义操作返回到 页面错误(500、404、403),当错误发生时使用 MVC 上的过滤器操作。

目前,我在文件 Global.asax 中使用Application_Error 方法返回页面错误,但从 AJAX 调用操作时它不起作用。

例如:

这是页面

[ExecuteCustomError]
public ActionResult TestAction()
{
    Rerurn View();
}

这是 AJAX 调用后返回的视图

[ExecuteCustomError]
public ActionResult ReturnView()
{
    //If return error code, i have return message error here.
    return PartialView();
}

【问题讨论】:

  • ExecuteCustomError的代码是什么?
  • 您是否在共享视图文件夹中添加了错误页面
  • @CodeNotFound:这是动作过滤器的愿望:ExecuteCustomError。
  • 是的。我知道。我要求它只是看看你已经开始为这个问题编写什么代码,并帮助你改进代码。
  • 这是我对方法 ExecuteCustomError 使用过滤器操作的想法。我的问题,如何创建方法可以执行自定义错误使用过滤器操作。

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


【解决方案1】:

您似乎没有提供错误页面的正确路径。 就像您需要在共享视图文件夹中添加错误页面一样,您可以访问此页面。 如果您的页面位于其他文件夹中,那么您必须指定错误视图页面的正确路径。 如下:

return PartialView("~/Views/ErrorPartialView.cshtml", myModel);

我们还有其他选项可以通过网络调用错误页面。在配置文件中,您可以进行以下设置:

<configuration> ... <system.webServer> ... <httpErrors errorMode="Custom" existingResponse="Replace"> <clear /> <error statusCode="400" responseMode="ExecuteURL" path="/ServerError.aspx"/> <error statusCode="403" responseMode="ExecuteURL" path="/ServerError.aspx" /> <error statusCode="404" responseMode="ExecuteURL" path="/PageNotFound.aspx" /> <error statusCode="500" responseMode="ExecuteURL" path="/ServerError.aspx" /> </httpErrors> ... </system.webServer> ... </configuration>

这里是全局异常过滤器:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MVCGlobalFilter.Filters
{
    public class ExecuteCustomErrorHandler : ActionFilterAttribute, IExceptionFilter
    {
        public void OnException(ExceptionContext filterContext)
        {
            Exception e = filterContext.Exception;
            filterContext.ExceptionHandled = true;
            filterContext.Result = new ViewResult()
            {
                ViewName = "CommonExceptionPage"
            };
        }
    }
}

现在你必须在Global.asax 文件中注册你的ExecuteCustomErrorHandler 类:

/// <summary>
/// Application start event
/// </summary>
protected void Application_Start()
{
       AreaRegistration.RegisterAllAreas();
       FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
       RouteConfig.RegisterRoutes(RouteTable.Routes);
       BundleConfig.RegisterBundles(BundleTable.Bundles);
       log4net.Config.XmlConfigurator.Configure();

       // Calling Global action filter
       GlobalFilters.Filters.Add(new ExecuteCustomErrorHandler());
}

您需要在共享文件夹中添加CommonExceptionPage 视图:

CommonExceptionPage.cshtml

@{
    ViewBag.Title = "Execute Custom Error Handler";
}

<hgroup class="title">
    <h1 class="error">Error.</h1>
    <h2 class="error">An error occurred while processing your request.</h2>
</hgroup>

【讨论】:

  • 感谢@Laxman Gile!但我可以使用过滤器操作重定向到操作错误页面,而不是在 web.config 上进行编辑。在我上面的问题中,我可以创建动作过滤器 ExecuteCustomError 来执行自定义错误。
  • 能分享一下executecustomerror动作过滤代码
  • 哦!我的问题是方法ExecuteCustomError。如何创建方法动作过滤器ExecuteCustomError??
  • 不用担心它会在错误页面上自动重定向到你现在检查它。
  • 感谢@Laxman Gile。我一直在尝试。当操作发生异常时,您的上述代码可以正常工作。如何获取状态代码以重定向到页面错误引用 404、500 和 403。此处操作过滤器,您无需在 Application_Start 方法上声明。默认它在 Action 执行时运行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-27
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2014-11-09
  • 2018-12-03
相关资源
最近更新 更多