2

我在我的 aspx 页面中使用带有属性 [WebMethod] 的方法。我不使用任何 asp.net ajax,而是使用 jQuery 来调用这些方法并以 JSON 格式返回对象。这一切都很好。

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

所以我抛出了一个 AccessViolationException 异常,然后可以由 JavaScript 中的 OnError 回调函数解析。这也有效,但例外包括完整的 StackTrace,我不想将其提供给调用客户端。

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

我正在使用 ASP.Net 3.5SP1 和 jQuery 1.32

4

5 回答 5

3

您还可以添加:

customErrors mode="On"/

在您的 web.config 中,这将删除堆栈跟踪并只留下异常消息

于 2016-06-01T06:44:20.630 回答
2

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

只需将您的对象包装在一个响应对象中,该对象可以包含状态错误代码和向用户显示的错误消息。

于 2009-04-21T16:51:02.837 回答
1

正如 NunFur 所建议的那样,我改变了我的方法,而不是抛出错误,而是返回一个“更丰富”的对象。

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

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

现在,如果发生意外情况,我可以完全控制它。

感谢您的输入

于 2009-04-21T18:30:35.203 回答
0

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

要么不返回任何内容(null/nill/whatever),要么返回 false bool 值。

抱歉,我没有比这更好的答案了……我必须继续寻找自己。

于 2009-04-21T17:14:35.713 回答
0

您可以查看 SoapException: http: //msdn.microsoft.com/en-us/library/system.web.services.protocols.soapexception (VS.71).aspx

我只是不确定,当它从 JavaScript 调用时它是否会起作用。特别是如果它是通过获取请求调用的。

BTW AccessViolationException 据我所知是在应用程序访问它无法访问的内存时抛出的。

/阿斯格

于 2009-04-21T17:25:40.490 回答