2009-04-21 49 views
1

我在我的aspx页面中使用属性[WebMethod]的方法。我不使用任何asp.net ajax,但jQuery调用这些方法并以JSON返回对象。这一切工作正常。隐藏堆栈跟踪由asp.net WebMethod返回的异常?

接下来,我在webMethod中添加了一个授权检查,如果当前用户无法访问我需要让调用JavaScript知道的功能。

所以我抛出一个AccessViolationException异常,然后可以通过JavaScript中的OnError回调函数进行解析。这也适用,但是这个例外包括完整的StackTrace,我不想让这个提供给调用客户端。

当WebMethod返回一个业务对象时,我可以使用哪些其他方式将“拒绝访问”返回给客户端?

我使用ASP.Net 3.5SP1和jQuery 1.32

回答

2

为什么传播通过导线错误?为什么不使用错误响应?

只是将您的对象包装在响应对象中,该响应对象可以包含状态错误代码和错误消息以呈现给用户。

+0

我想我很少控制WebMethod的返回值,我可以返回预期的业务对象或null。我怎么会在那里抛出'错误回应'? – 2009-04-21 16:57:59

+0

你可以将你的BusinessObject封装在一个可以自己拥有状态的ResponseObject中。你不能吗? – 2009-04-21 17:00:11

0

当事情真的出错时,我会保存例外情况。 (例如无法连接到数据库)

要么不返回任何内容(null/nill/whatever),要么返回一个假布尔值。我不得不继续寻找我自己。

1

至于建议由NunFur我改变我的做法和而不是抛出一个错误,我返回一个“富裕”的对象。

至少有两个选项,第一个选项是将我的业务对象封装到具有某些状态属性的响应对象中。我尝试过,但它使JSON更复杂。 因此,而不是添加一个新的对象,我添加了两个属性到我的业务对象,如ServiceStatus和ServiceMessage。默认情况下,这些是200和'',但如果出现任何错误(无法访问,错误),可以通过WebMethod代码进行设置。在这种情况下,他们的业务对象将是'空'(无数据)。 JavaScript代码首先检查ServiceStatus并作出适当的反应。

我将这两个字段添加到WebMethods返回的所有对象中,即使是一个简单的字符串。他们必须实现与这两个属性的接口。

现在我完全控制了电线,以防意外情况发生。

感谢输入

1

您还可以添加一个:在你的web.config

customErrors mode="On"/ 

,这将切掉堆栈跟踪,让你只异常消息