ISAPI模式下的JOSN获取异常,Standalone下又是正常的,如何解决?(语言-javascript)

该问题来自社区帖: https://bbs.csdn.net/topics/616832552.为符合问答规范, 该问题经过ChatGPT优化
以下是优化后的问题: ``` ISAPI模式下的JOSN获取异常,Standalone下又是正常的 这是调用代码:
procedure TMainForm.UniFormShow(Sender: TObject);
var
  PathInfo, access_token: string;
  GetJSON: TGetJSON;
  RequestJSON, RequestJSONS: TJSONObject;
begin
  PathInfo := UniApplication.Parameters.Values['authCode'];
  if PathInfo = '' then
  begin
    UniSession.AddJS('window.location.href = "https://login.dingtalk.com/oauth2/challenge.htm?redirect_uri=http://175.16.27.83:8023&response_type=code&client_id=ding0&scope=openid&state=dddd&prompt=consent";');
    exit;
  end;
  RequestJSON := TJSONObject.Create;
  RequestJSONS := TJSONObject.Create;
  RequestJSON := GetJSON.GetUsertoken(PathInfo);
  try
    access_token := RequestJSON.GetValue('accessToken').Value;
  except
    UniSession.AddJS('window.location.href = "https://login.dingtalk.com/oauth2/challenge.htm?redirect_uri=http://175.16.27.83:8023&response_type=code&client_id=ding0w5x6uud3otz1sfh&scope=openid&state=dddd&prompt=consent";');
    exit;
  end;
  RequestJSONS := GetJSON.GetLoginUser(access_token);
  if RequestJSONS.GetValue('avatarUrl').Value <> '' then
  begin
   UniImage3.Url := RequestJSONS.GetValue('avatarUrl').Value;
  end;
  UniLabel1.Caption := RequestJSONS.GetValue('nick').Value;
  UniMenuItemAdd();
end;
这是实现代码:
function TGetJSON.GetUsertoken(Auto_Code: String):TJSONObject;
var
  RequestJSON, ResponseJSON: TJSONObject;
  ResponseText, vurl, JsonString: string;
  js: TStringStream;
begin
  RequestJSON := TJSONObject.Create;
  ResponseJSON := TJSONObject.Create;
  vurl := 'https://api.dingtalk.com/v1.0/oauth2/userAccessToken';
  try
    // 构建要发送的 JSON 数据
    RequestJSON.AddPair(TJSONPair.Create('clientId', 'dingh'));
    RequestJSON.AddPair(TJSONPair.Create('clientSecret', 'xHdgoZxqVWSp'));
    RequestJSON.AddPair(TJSONPair.Create('code', Auto_Code));
    RequestJSON.AddPair(TJSONPair.Create('refreshToken', Auto_Code));
    RequestJSON.AddPair(TJSONPair.Create('grantType', 'authorization_code'));
    JsonString := RequestJSON.ToString;

    js := TStringStream.Create(JsonString);

    // 设置请求的 Content-Type 为 application/json
    MainForm.IdHTTP1.Request.ContentType := 'application/json';

    // 发送 POST 请求,获取响应
    ResponseText := MainForm.IdHTTP1.Post(vurl, js);

    // 解析返回的 JSON 数据
    ResponseJSON := TJSONObject.ParseJSONValue(ResponseText) as TJSONObject;

    Result := ResponseJSON;
  except
    Result := nil;
  end;
end;
经过测试在一个获取JSON数据的时候报错, 在RequestJSON.GetValue('accessToken').Value;获取信息的时候提示异常。在ISAPI里面需要调整那些地方。 ```不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    我理解你的问题是在ISAPI模式下获取JSON数据异常,但在Standalone模式下正常。通过代码分析,问题发生在 RequestJSON.GetValue('accessToken').Value 这一行。

    在ISAPI模式下,ISAPI扩展是一种在IIS(Internet Information Services)中运行的动态链接库,可以处理HTTP请求。因此,在ISAPI扩展环境下,需要确保以下几点以解决该问题:

    1. 确保权限配置正确:ISAPI扩展运行在IIS下,确保相应的文件夹和文件有足够的权限,例如读取和写入权限,以允许ISAPI扩展运行并访问资源。

    2. 检查IIS配置:确保在IIS中,ISAPI扩展注册并配置了正确的Handler映射。

    3. 检查ISAPI模块:确保ISAPI模块已正确设置和加载。如果使用第三方ISAPI模块,可以尝试重新安装或升级模块以解决潜在的问题。

    4. 检查IIS版本:不同版本的IIS可能有一些差异和限制。确保当前使用的IIS版本与ISAPI模块的要求相符合,并查阅相关文档以解决潜在的兼容性问题。

    5. 调试和日志:使用IIS的日志功能来记录和跟踪错误,以了解更多详细信息。尝试捕获异常并记录错误消息或异常堆栈信息,以便更好地诊断和解决问题。

    这些是一般性的解决方案,可能需要根据具体的环境和配置进行调整。如果问题仍然存在,我建议更详细地检查代码和日志,以便进一步了解问题所在。如果你还有其他疑问,请告诉我,我会尽力帮助你解决该问题。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^