【问题标题】:How do I return a static page as a ViewResult in a global error filter (MVC4)?如何在全局错误过滤器 (MVC4) 中将静态页面作为 ViewResult 返回?
【发布时间】:2013-01-22 00:56:59
【问题描述】:

我正在尝试编写一个 FilterAttribute、IExceptionFilter 全局错误处理属性,它应该提供一个自定义错误视图。我覆盖 public void OnException(ExceptionContext context) 并做

context.HttpContext.Response.Clear();
context.HttpContext.Response.TrySkipIisCustomErrors = true;
context.HttpContext.Response.StatusCode = 403;

context.ExceptionHandled = true;
context.Result = new ViewResult { ... not sure what to put here... }

这是我卡住的地方。 到目前为止,我所做的一切都会让我看到内部服务器错误页面。我怀疑我想要类似的东西

context.Result = new ViewResult
{
    ViewName = "~/Errors/ReadOnlyMode.cshtml",
}

但这似乎不起作用(内部服务器错误...)。

【问题讨论】:

  • 注意 - 我不认为我想做重定向 - 只要我返回错误状态代码,它们就不是必需的

标签: asp.net-mvc asp.net-mvc-4


【解决方案1】:

这应该可以工作

context.Result = new ViewResult
{
    ViewName = "~/Views/Errors/ReadOnlyMode.cshtml",
}

【讨论】:

  • 谢谢,你是对的。它(原始代码)应该可以正常工作。在删除 web.config 中的所有自定义错误处理部分之前,我无法弄清楚为什么它不起作用。在这一点上,我终于可以看到我的 .cshtml 中有一个编译错误被屏蔽了。
【解决方案2】:
context.Result = new RedirectToRouteResult(
    new RouteValueDictionary 
    { 
        { "Controller", "Errors" }, 
        { "Action", "ReadOnlyMode" } 
    });

这对我来说很好。

【讨论】:

  • 我不认为我想做重定向 - 除非你有充分的理由?
猜你喜欢
  • 2015-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-11
  • 1970-01-01
  • 2020-04-09
  • 2012-11-05
  • 1970-01-01
相关资源
最近更新 更多