我编写了一个简单的过滤器属性,实现了IExceptionFilter接口,只有在ajax动作中才会处理异常。网上有很多例子。挑选其中任何一个。 但是,我添加了一行:
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
这是因为任何异常过滤器捕获确实是一个错误,我希望它是这样报告的。其次,我只是不想在某种{success:success,data:data}对象中包含任何ajax响应。
现在问题出现了:在我的开发机器上,一切都运行得很完美:如果发生异常,客户端会让json描述问题;如果不是 - 返回的数据是调用者预期的数据。本地(谁在同一台机器上查看站点)和远程客户端。
但是当我在另一台服务器上部署应用程序时,只有json为本地客户端返回错误,对于其他所有人 - 它是标准错误html页面。 为什么? <customErrors />
模式属性在两个网站上都设置为RemoteOnly
。
答案 0 :(得分:0)
这是我如何解决的:
我在第二台计算机上启用了“失败的请求跟踪”功能。然后我运行相同的请求,应该在本地和远程机器上的json中返回错误信息。这给了我两个日志文件。我对它们进行了比较,发现它与
有关263. NOTIFY_MODULE_START ModuleName="CustomErrorModule", Notification="SEND_RESPONSE", fIsPostNotification="false" 09:05:49.998
264. GENERAL_NOT_SEND_CUSTOM_ERROR Reason="EXISTINGRESPONSE_AUTO"
265. NOTIFY_MODULE_END ModuleName="CustomErrorModule", Notification="SEND_RESPONSE", fIsPostNotificationEvent="false", NotificationStatus="NOTIFICATION_CONTINUE"
我是这样来的:
<httpErrors existingResponse="PassThrough" />
之后我还分析了两台机器上的machine.config。在这件事上一无所获。这意味着我仍然不知道为什么它首先表现不同。
有什么想法吗?