我正在使用 Delphi 10.1 Berlin Update 2 Enterprise 和 DataSnap 客户端/服务器 REST 框架。
如果我在不调试的情况下运行应用程序并调用用户无权调用的方法,则代码运行时没有任何异常,并且该方法返回空响应。
当以交互方式调试客户端对 DataSnap 服务器方法的调用时,我收到两个关于“未经授权”的弹出异常。
第一个冒泡并被第二个取代。
第二个异常被“吃掉”并且 session /连接简单地关闭,然后该方法返回一个空白结果(例如,如果返回类型是整数,则返回零,而字符串返回类型返回空字符串)。
这发生在 Datasnap.DSClientRest 单元中 ExecuteRequest 方法末尾附近的以下代码部分中:
except
on E: TDSRestProtocolException do
LSessionExpired;
end;
为什么这些异常(例如 TDSRestProtocolException)没有到达我的代码?
我有点认为这是更新 2 的新内容,我记得在更新 2 之前看到这些异常冒泡到我的代码中。
Attached是一个演示问题的骨架示例(由 Delphi 向导生成的标准示例) - 单击按钮,您会得到“”而不是“4321”,因为用户未获得授权 - 但没有运行时异常。
我是 DataSnap 的新手,所以请耐心等待 :-)
提前感谢您的有用回复=)
最佳答案
发生这种情况是因为 DSAuthenticationManager1 组件添加到服务器的 web 模块并且客户端无法进行身份验证。
请通过此检查如何使用身份验证
Adding Authentication and Authorization
关于Delphi Datasnap 客户端代码未获得未经授权的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41928059/