2013-05-06 48 views
2

我有一个页面正在执行jQuery Ajax调用WebMethod在我的一个ASPX页面。在某些情况下,我的WebMethod正在抛出一个带有错误消息的异常。这个错误信息对用户界面非常重要,因为它告诉用户怎么说,所以他可以修复他的表单。从WebMethod获取错误消息,同时保持Web.Config的安全

这在开发环境中工作正常。但是,在我的生产Web.Config中,我需要将customErrors设置为“开”,所以我不会显示重要信息。而且,我的IIS也覆盖了HTTP 500错误。

我尝试了ASMX的WebServices,它工作的很完美。 IIS不覆盖我的HTTP 500,并且customErrors不隐藏WebService发送的消息。但是现在不可能将我所有的ASPX WebMethods迁移到ASMX文件。

我在寻找指导方针。我的UI如何获得我的WebMethod的错误,同时保持我的Web.Config安全生产?

回答

1

您应该从不显示用户的死亡黄色屏幕。

相反,考虑实现一个Response对象,包含一个布尔成功,一个ErrorMessage(字符串)和实际的结果数据(如果需要的话)。

然后,您可以使用JavaScript回调并检查该调用是否成功。如果没有,只需提醒()错误消息。

+0

这就是我最终做的。但是我不喜欢这个解决方案,因为即使有错误,服务器总是用Http 200响应。你知道使用http标准处理我的异常的方法吗? – NLemay 2013-09-25 13:10:39

+1

500不是使用HTTP标准处理它的好方法,因为这意味着内部错误。 如果你想用HTTP标准来处理它,请使用每个说的规范。如果错误来自客户端(即:您使用jQuery发送数据并且此数据无效),则使用4XX状态码。 从此开始,您可以使用jQuery AJAX调用失败的回调(例如,参见[this](http://api.jquery.com/jQuery.ajax/#example-3))。使用失败的回调可以显示一条消息,而不必显示错误屏幕 – CharlesAD 2013-09-25 13:17:22

+1

尽管这是一个好方法,但使用WebMethods并不重要,因为它们不是很RESTful。您应该检查ASP.NET Web API,看看它们是否更符合您的需求(asmx /页面方法正在变老) – CharlesAD 2013-09-25 13:19:34