IIS 8.5 覆盖自定义 JSON 错误响应,而是返回默认的 500 错误响应页面。如何让 IIS 8.5 返回我的自定义错误?

2023-12-14

我遇到了一个恼人的问题,我认为这是由 IIS 8.5 引起的。通过我正在创建的 Web 应用程序,我创建了一个自定义 JSON HttpStatusResult 类(这是一个想法来自这个 stackoverflow 帖子),这使我能够返回 JSON 以及 500、400 或其他类型的 HTTP 响应状态代码。这是该代码:

public class JsonHttpStatusResult : JsonResult
{
    private readonly HttpStatusCode _httpStatus;

    public JsonHttpStatusResult(object data, HttpStatusCode httpStatus)
    {
        Data = data;
        _httpStatus = httpStatus;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        context.RequestContext.HttpContext.Response.StatusCode = (int)_httpStatus;
        JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        base.ExecuteResult(context);
    }
}

在使用 IISExpress 进行本地测试时,这正如我所期望的那样工作 - 如果我返回 500 Http 状态代码以及一些 JSON,则响应仅包含 JSON。但是,当我将网站发布到我们拥有的 IIS 8.5 Web 服务器时(不幸的是,我们还没有任何正在运行的 IIS 10 - 我不认为这会产生影响?),它反而返回默认的 500 错误响应页面,而不是 JSON:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>500 - Internal server error.</title>
<style type="text/css">
<!--
body{margin:0;font-size:.7em;font-family:Verdana, Arial, Helvetica, sans-serif;background:#EEEEEE;}
fieldset{padding:0 15px 10px 15px;} 
h1{font-size:2.4em;margin:0;color:#FFF;}
h2{font-size:1.7em;margin:0;color:#CC0000;} 
h3{font-size:1.2em;margin:10px 0 0 0;color:#000000;} 
#header{width:96%;margin:0 0 0 0;padding:6px 2% 6px 2%;font-family:"trebuchet MS", Verdana, sans-serif;color:#FFF;
background-color:#555555;}
#content{margin:0 0 0 2%;position:relative;}
.content-container{background:#FFF;width:96%;margin-top:8px;padding:10px;position:relative;}
-->
</style>
</head>
<body>
<div id="header"><h1>Server Error</h1></div>
<div id="content">
 <div class="content-container"><fieldset>
  <h2>500 - Internal server error.</h2>
  <h3>There is a problem with the resource you are looking for, and it cannot be displayed.</h3>
 </fieldset></div>
</div>
</body>
</html>

所以这就是我所困惑的问题 - 如何让 IIS 返回我的自定义 500 JSON 错误结果,而不是默认的 500 页面?我环顾四周,看到一些帖子提到这些是需要的两行重要代码:

HttpContext.Response.Clear();
HttpContext.Response.TrySkipIisCustomErrors = true;

但是,我不知道在发送自定义错误响应时如何设置这些,因为一旦我返回 JSON 错误响应,如下例所示:

return new JsonHttpStatusResult(new
{
    ResponseMessage = ex.Message
},
HttpStatusCode.InternalServerError);

然后我无法设置响应,因为调用返回后不再运行任何代码?一旦我的自定义 Json 结果类创建了响应,我是否可以通过某种方式挂钩响应,我看到了类似的东西通过这篇文章,但不幸的是它似乎没有解释我应该如何使用它?

值得一提的是,我尝试返回 JSON 错误响应的原因是因为这些操作是由前端的 Ajax 调用的,然后这些错误由前端的 javascript 处理/显示,这就是我为什么要这样做的原因。我试图传回的不仅仅是“500 内部服务器错误”消息。


好吧,找到了我的问题的解决方案,在我的例子中,我所要做的就是将其添加到 web.config 中system.webServer元素:

<httpErrors existingResponse="PassThrough"/>

不需要更改任何其他设置,或最终修改响应。此设置似乎会导致 IIS 在出现错误时传递现有响应。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IIS 8.5 覆盖自定义 JSON 错误响应,而是返回默认的 500 错误响应页面。如何让 IIS 8.5 返回我的自定义错误? 的相关文章

随机推荐

  • Java、传值、引用变量

    我在理解以下示例中 Java 的 按值传递 操作时遇到问题 public class Numbers static int s ccc 7 static int t ccc 7 public static void calculate in
  • Intel 在哪里记录了 ModR/M 字节中扩展寄存器 (R8-R15) 的编码?

    我用的是官方最新的 英特尔 64 和 IA 32 架构软件开发人员手册合并卷 1 2A 2B 2C 2D 3A 3B 3C 3D 和 4 作为了解x86 64 ISA的机器级编码的参考 第 2 卷第 2 1 3 节中提供的 ModR M 和
  • 从修订历史记录中删除特定文件

    我试图从修订历史记录中删除我无意提交的特定文件 有人可以提供一种方法来做到这一点吗 你需要使用svndumpfilter工具 该过程涉及转储您的存储库 过滤 使用svndumpfilter 你的转储文件 并将结果重新加载到新的存储库中 看本
  • 在哪里可以阅读访客信息

    UPDATE 这个问题暴露了过时的 最糟糕的方法visitors count每个人都应该避免这种情况 使用复杂的计数器 由于我没有找到令人满意的 足够简单 的解决方案 因此我想出了自己的解决方案 创建一个名为的空文件ip txt并在代码中的
  • 用python中的列表替换元素

    在Python中 用另一个列表中的元素替换列表中的元素的最佳方法是什么 例如 我有 a 1 replace this 4 我想更换replace this with 2 3 更换后必须是 a 1 2 3 4 Update 当然 可以用切片来
  • 如何复制 Azure 容器和 Blob

    我正在尝试将所有 blob 复制到不同的存储中 CloudBlobClient srcblobClient sourceStorageAccount CreateCloudBlobClient CloudBlobClient targetB
  • MapFragment:使用后退按钮后性能不佳

    我在使用时遇到性能问题MapFragment与操作栏菜单一起 当满足三个条件时就会出现该错误 Have a MapFragment实例化 从选项菜单触发片段事务 用另一个片段替换地图片段 点击后退按钮并返回到地图片段 现在性能明显下降 平移
  • 使用 ShapedDrawable 将 ColorFilter 应用于 ImageView

    我有一个ImageView with android src设置为ShapedDrawable 即一个白色圆圈 我想要的是给这个上色ImageView在运行时响应一些事件 imgView setColorFilter似乎是解决方案 但使用此
  • 使用 IP 地址从 C# HttpClient 向同一台机器发出 HTTP 请求

    基本上 我需要能够在我所在的同一台计算机上向网站发出 HTTP 请求 而无需修改主机文件来创建指向域名的指针 例如 我在一个网站上运行代码 假设 www bobsoft com 位于服务器上 我需要向位于同一服务器上的 www tedsof
  • 如何在 Sqlite 中将图像存储为 blob 以及如何检索它?

    我想将图像 来自 url 存储到 sqlite 数据库中 为此 我使用 db new DataBase getApplicationContext URL url new URL http sree cc wp content upload
  • 汇编程序不打印读取的字符串

    我编写了以下代码 允许用户输入一个数字并将其打印回来 model tiny stack 100 data userMsg db 13 10 Please enter a number dispMsg db 13 10 You have en
  • 在 Reveal.js 演示文稿末尾重复标题幻灯片

    我想在我的四开本 Reveal js 演示文稿末尾重复我的标题幻灯片 我正在寻找类似的命令title slide或其他东西 Thanks 正如我在评论中已经提到的 您可以使用一些 javascript 代码和 CSS 在演示文稿末尾自动重复
  • Node.js、WebSocket 位置问题?

    我使用 Node 监听 localhost 端口 8000 创建了一个服务器 已验证其运行正常 但我无法访问客户端上的 WebSocket Chrome 5 尝试了各种 Git 存储库 节点 websocket socketIO 文章等的几
  • 在 Go 中解组 XML 元素的异构列表

    我有一个像这样的 XML 文档
  • 如何组织过多的 mysql 表? [关闭]

    Closed 这个问题需要细节或清晰度 目前不接受答案 我们的开发数据库现在有 263 个表 在开发过程中 我们只与少数人合作 有没有办法将所有表格组织到类似文件夹的东西中 没有办法对 MySQL 有意义的分层组织表 正如其他人所指出的 您
  • 带有发布请求的 swift3 webview

    我正在运行一个学校项目 我是 swift3 的新人 通过搜索 我知道如何将数据从一个视图传递到另一个视图 将数据从 tableview 传递到 webview 在上面的帖子中 他使用 http get 请求将数据传递到网站 然后重新加载 w
  • 机械化和 JavaScript

    我想使用 Mechanize 来模拟浏览具有活动 JavaScript 的网页 包括 DOM 事件和 AJAX 但到目前为止我还没有找到这样做的方法 我查看了一些支持 JavaScript 的 Python 客户端浏览器 例如 Spynne
  • 缺少当前文件夹 Capistrano Rails 3.2

    我需要了解为什么 capistrano 不创建当前文件夹 我正在使用以下命令 cap deploy setup cap deploy check cap deploy 但是当我检查我的应用程序目录时 我没有当前文件夹 这是我的deploy
  • 如何动态更改定向 d3.js 力布局上方向箭头的位置和大小?

    我目前正在我的力布局中实现箭头 如本示例中所做的那样 http bl ocks org mbostock 1153292 并且效果很好 然而 人们很快就会意识到箭头的位置和大小在这里是硬编码的 因为节点的大小永远不会改变 我有一个图表 我动
  • IIS 8.5 覆盖自定义 JSON 错误响应,而是返回默认的 500 错误响应页面。如何让 IIS 8.5 返回我的自定义错误?

    我遇到了一个恼人的问题 我认为这是由 IIS 8 5 引起的 通过我正在创建的 Web 应用程序 我创建了一个自定义 JSON HttpStatusResult 类 这是一个想法来自这个 stackoverflow 帖子 这使我能够返回 J