.net - 为什么 IIS 7 不返回 JSON 错误?适用于*我的*机器

标签 .net json wcf iis .net-4.0

我遵循以下博客文章中的原则,并且在使用 Visual Studio 2010 的内置 Web 服务器调试 WCF 服务时得到了预期的行为。

http://zamd.net/2008/07/08/error-handling-with-webhttpbinding-for-ajaxjson/

当我的应用程序抛出FaultException() 时,我可以在本地计算机上看到该错误的JSON 表示形式。应用程序还返回适当的 HttpStatusCode(在本例中为 401 Unauthorized),这是所需的行为。

{"Code":"UserNotLoggedInFault","DisplayText":"You must be logged in to access this resource.","InternalText":"User is not logged in"}

当我将应用程序部署到 IIS 7.0 时,我得到了正确的 HttpStatusCode,但返回的 html 是与状态代码关联的通用文本:

You do not have permission to view this directory or page.

因为这是在本地运行的,所以我认为问题是 IIS 配置设置。我已经删除了拦截错误状态的 IIS: Error Pages 值(它用于从 %SystemDrive%\inetpub\custerr\\401.htm 返回格式化的 HTML)

有谁知道我需要更改哪些 IIS 设置才能在返回 200 范围之外的 HTTP 状态时允许 JSON 响应通过? ...或者也许我还需要做其他事情?

<小时/>

更新#1

只有当我的应用程序抛出一个也会将 HttpStatusCode 设置为 Unauthorized (401) 的故障异常时,才会发生这种情况。如果我的应用程序返回状态代码 404 Not Found,则 JSON 会正确返回。

问题仍然存在,但我认为它仅适用于返回 401 未经授权的状态代码。

以下是 Charles Web Proxy 捕获的响应的一些屏幕截图

/image/A11g3.jpg

这是我访问本地计算机时的样子

/image/Njfl5.jpg

<小时/>

更新#2

因此,如果我通过远程桌面进入服务器并通过本地主机访问该站点,则不会发生这种情况。当我点击需要身份验证的 URL 时,我会返回正确的 JSON 对象。

/image/AV4Cr.png

这是否意味着 IIS 会以不同的方式处理 401 状态代码,并且未经身份验证的用户将无法获得正确的响应?

最佳答案

我们在 IIS“错误页面”配置中发现了一个可以修复该行为的设置。

您需要将错误响应设置为“详细错误”,默认为“本地请求的详细错误和远程请求的自定义错误页面”。您可以在您的网站或服务器范围内设置它。

该功能似乎决定显示 401 的自定义错误页面,而不是向未经授权的客户端提供更多详细信息。

只需确保您的服务错误处理屏蔽了异常,否则客户端可以看到堆栈跟踪。

关于.net - 为什么 IIS 7 不返回 JSON 错误?适用于*我的*机器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11037571/

相关文章:

c# - 在不继承 DynamicObject 的情况下在对象上实现动态功能?

.net - 依赖关系和引用 - 我到底应该引用什么?

java - 将嵌套的 json 数据解析为字符串

WCF 将对象返回给客户端

wcf - 什么是 WCF(以及优缺点)?

c# - 是否可以在 MS 测试中创建和关闭 wcf 服务主机

c# - 用于在运行时从接口(interface)生成具体类型的开源库?

c# - MVVM、WPF 和验证

javascript - 在 Node.js 中向 Angular.js 发送响应

ios - 通过 URLSessionUploadTask 响应数据