asp.net-mvc - IIS 中的自定义错误页面

标签 asp.net-mvc iis error-handling

我的 web.config 中有以下设置

<customErrors mode="RemoteOnly" defaultRedirect="/ServerError" redirectMode="ResponseRewrite"/>

<httpErrors errorMode="Custom" existingResponse="Replace">
      <remove statusCode="400" subStatusCode="-1" />
      <remove statusCode="404" subStatusCode="-1" />
      <remove statusCode="500" subStatusCode="-1" />
      <error statusCode="400" path="/error/Error400" responseMode="ExecuteURL" />
      <error statusCode="404" path="/error/Error404" responseMode="ExecuteURL" />
      <error statusCode="500" path="/error/Error500" responseMode="ExecuteURL" />
</httpErrors>

通过上述配置,我们的网站能够捕获 404,并显示从/error/error404 提供的带有 404 Header 的漂亮 404 页面。

现在我有以下情况:
1. 用户导航到/action/id
2. 未找到 ID,我想返回 404,但提供自定义 404,与/error/error404 提供的通用 404 不同。即提供不同的自定义页面;

在我的 Controller 中,我有以下内容:
Response.StatusCode=(int)HttpStatusCode.NotFound;                          
Response.TrySkipIisCustomErrors = true;
return View("SomeView", model);

这是可以实现的吗?

PS:使用 IIS 8

如果有人对我实现的解决方案感兴趣,我已经做了以下事情:
1. 在我的action ,我设置了一个 session 变量Session["InvalidId"]=something2. 在我的ErrorController我有以下内容:
var invalidId = Session["InvalidId"];
if(invalidId != null)
{
    return View("SomeView", model);
}

这帮助我为我的通用页面提供了不同的 404 页面。

谢谢您的帮助 !

最佳答案

是的,这很容易实现,而且您并不需要其他页面。您需要为自定义消息提供一些 session 变量,并使用它们来确定是否需要显示一些消息。如果是这样,那么将它们显示在您的 View 中。

算法:

  • 您的自定义页面检测到错误
  • 生成一些错误消息
  • 您的自定义页面重定向到错误页面
  • 错误页面检查要显示的错误消息
  • 如果有此类错误消息,则显示它们并清除错误消息队列
  • 关于asp.net-mvc - IIS 中的自定义错误页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39914380/

    相关文章:

    c# - 日期时间并不总是得到设置

    azure - IIS应用程序请求路由将206部分内容更改为200

    android - 移动应用程序崩溃时如何捕获错误消息/将错误消息发送到电子邮件?

    php - PHP-如何将数据发送到另一个PHP-SQL页面并在同一页面上接收图表图像

    c# - 网格列格式的 Razor 多行语法

    javascript - ASP MVC css/js bundle : length & name of bundle parameter "?v=1234567890"

    azure - Dotnet Core 1.1 Azure部署: No executable found matching command "dotnet-publish-iis"

    php - 通过 Windows 身份验证登录时,我应该信任 php 变量 $_SERVER[AUTH_USER] 吗? IIS Intranet 托管应用程序

    php - 如何使用 PDO 抑制 PHP 警告

    c# - 如何使用Microsoft AntiXss 4.x?