【问题标题】:Show custom error for "504 Gateway Timeout error"显示“504 网关超时错误”的自定义错误
【发布时间】:2017-05-26 11:57:36
【问题描述】:

我正在为 ASP.net MVC-5 项目工作,我是初学者。到目前为止,我了解 MVC 的基础知识,并且能够显示页面并发布和获取请求。但是我遇到了一个问题,我得到“504 网关超时错误”,我需要实现一个功能,如果客户端得到“504 网关超时错误”,我应该能够显示一个特定的页面,比如“出了点问题”而不是标准错误。下面是我所做的。

  <system.web>
    <compilation debug="true" targetFramework="4.5.1" />
    <httpRuntime targetFramework="4.5" />
    <customErrors mode="On" redirectMode="ResponseRewrite">
    </customErrors>
  </system.web>

但是我还需要更改或添加什么。有人可以在这里指导我。我迷路了。

【问题讨论】:

  • 您的服务器是代理服务器并抛出 504 还是您使用的是代理服务器?
  • 我只是一个初学者。你能告诉我如何找到它。原谅我的无知。
  • @Steve 想要达到的是,如果您的站点有一个前端代理(如负载均衡器),那么该负载均衡器就是对用户/浏览器的“响应”(它是不是您的应用程序/网站)。所以问题是您是否可以控制该代理。尽管似乎存在应用程序问题,因为它无法“及时”响应(无论代理中设置的超时值如何)。 user load balancer/proxy 您的网站/应用程序..Hth...
  • 没有负载均衡器。网站托管在 IIS 服务器上,我可以完全访问 IIS 设置,所有代码都在 IIS 中。
  • 如果这是对某些外部(支付 API)的调用,则在您的调用(调用外部支付 api 的 api 客户端)中处理它,而不需要为您的整个 进行配置更改应用程序。换句话说,将其保留在“付款范围”中,并像处理“失败的付款确认/条件”一样处理它(并致力于向用户发送消息)。大多数支付 API 都会有错误代码和如何处理它们的建议。嗯……

标签: c# asp.net .net asp.net-mvc asp.net-mvc-5


【解决方案1】:

如果您的 ASP.NET MVC 应用程序由 IIS(或其他代理服务器)托管,则 IIS 会返回 504 错误并发送到浏览器,因为您的应用程序没有及时响应请求. IIS 有一个超时(可为每个网站配置),如果达到,则返回 504。

在这种情况下,您无法在应用程序中定义自定义错误页面,因为它没有反应。

您可以将 IIS 配置为服务器自定义错误页面。这个video tutorial 展示了如何做到这一点。

【讨论】:

  • @Unbreakable 配置 IIS
  • 请教初学者如何配置的链接?非常感谢您的帮助。
  • @Unbreakable - 我已经编辑了我的答案并发布了这个链接youtube.com/watch?v=qTZho5FxPM8,它显示了如何在 IIS 中设置自定义错误页面。
  • 非常感谢您的回复。实际上,我的经理希望我以某种方式在 ASP.net 代码中捕获错误。并从那里显示一条错误消息。我的意思是他不希望我通过更改 IIS“错误页面”设置来重定向到页面。是否仍然可以在 ASP.net 代码中捕获它,然后在不更改设置中的 IIS 错误页面的情况下显示一条消息。我被允许在 IIS Web 配置文件中进行更改 我们有一些过滤器、registerglobalfilters、GlobalFilterCollection 等等。你能在这里指导我吗?
  • 因为我们说的是 504 错误(而不是 404 或 500),所以无法在 ASP.NET 代码中捕获它。 IIS 正在等待 ASP.NET 代码的响应,该响应未发送(DB 速度慢或任何原因)。因此,IIS 在等待超时后启动,发送一个自己的错误页面(可以配置)并关闭连接,而 ASP.NET 代码中的请求可能仍然很忙。所以没有重定向,IIS只是简单的关闭连接(避免无休止的接受请求造成的污染)。
【解决方案2】:

ASP 实际上并没有返回这些页面,它实际上是 IIS。

Check out this SO on configuring IIS to let you return custom error pages


基本上你需要配置这些设置:

<system.web>
    <customErrors mode="On" defaultRedirect="~/Error">
      <!--Use whatever paths you need here, along with the accompanying status code -->
      <error redirect="~/Error/NotFound" statusCode="404" />
    </customErrors>
</system.web>

并创建一个控制器来处理错误,如下所示:

public class ErrorController : Controller
{
    public ViewResult Index()
    {
        return View();
    }
    public ViewResult NotFound()
    {
        Response.StatusCode = 404;  
        return View();
    }
}

以及匹配动作所需的任何视图。

【讨论】:

  • 您能否在您发布的链接的答案中解释一下redirect="~/404Redirect/" 是什么。我需要制作一个控制器和一个视图吗?还是只看风景就够了?
  • 如果你想让 MVC 处理它,你需要一个控制器。我将链接更改为更好的链接,请查看此链接。
  • 我会尝试并回复您。只是一件小事。做,我也需要对 IIS 或其他东西进行任何更改。我将更改配置文件,添加控制器并相应地添加视图。我是否需要打开 IIS 服务器并进行任何修改。
  • 通过更改配置文件,您正在更改 IIS。 IIS 主要只是这些配置文件的 GUI
  • @AndrewDiamond - IIS 不仅仅是“这些配置文件的 GUI”.....
猜你喜欢
  • 2011-04-08
  • 2017-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2016-06-19
  • 2022-05-05
  • 2013-05-12
相关资源
最近更新 更多