我在aspx页面中使用Attribute [WebMethod]的方法。我不使用任何asp.net ajax而是jQuery来调用这些方法并在JSON中返回对象。一切正常。
接下来,我在webMethod中添加了授权检查,如果当前用户无权访问我需要让调用JavaScript知道的功能。
所以我抛出了一个AccessViolationException异常,然后可以通过JavaScript中的OnError回调函数进行解析。这也有效,但异常包括完整的StackTrace,我不想让它对调用客户端可用。
当WebMethod返回业务对象时,我可以使用哪些其他方法将“拒绝访问”返回给客户端?
我正在使用ASP.Net 3.5SP1和jQuery 1.32
答案 0 :(得分:2)
为什么要通过电线传播错误?为什么不使用错误响应?
只需将对象包装在一个响应对象中,该对象可以包含状态错误代码和向用户显示的错误消息。
答案 1 :(得分:2)
您还可以添加:
customErrors mode="On"/
在你的web.config中,这将删除堆栈跟踪,只留下异常消息
答案 2 :(得分:1)
根据NunFur的建议,我改变了我的方法,而不是抛出一个错误,我返回一个“更丰富”的对象。
至少有两个选项,第一个选项是将业务对象封装到具有某些状态属性的响应对象中。我尝试了这个,但它使JSON更复杂。 因此,我不是添加新对象,而是向业务对象添加了两个属性,例如ServiceStatus和ServiceMessage。默认情况下,这些是200和'',但如果出现任何问题(无访问权限,正确错误),可以通过WebMethod代码进行设置。在这种情况下,他们的业务对象将是“空的”(没有数据)。然后JavaScript代码首先检查ServiceStatus并做出适当的反应。
我将这两个字段添加到WebMethods返回的所有对象中,甚至是一个简单的字符串。他们必须实现具有这两个属性的接口。
现在我可以完全控制线路,以防万一发生意外。
感谢输入
答案 3 :(得分:0)
我保存异常,以防出现问题。 (例如无法连接到数据库)
不返回任何内容(null / nill / whatever),或返回false bool值。
很抱歉,我没有比这更好的答案......我必须继续寻找自己。
答案 4 :(得分:0)
您可以查看SoapException:http://msdn.microsoft.com/en-us/library/system.web.services.protocols.soapexception(VS.71).aspx
我只是不确定,从JavaScript调用它是否可行。特别是如果用get-request调用它。
BTW AccessViolationException是我在应用程序访问无法访问的内存时抛出的最好的知识。
/导演Asger