使用 Classic ASP/ 创建服务器端 REST API 时遇到问题

Having a problem while creating a server-side REST API using Classic ASP/

虽然没有太多详细信息可以详细说明用 VBScript 编写的 Rest API 服务器端发生的情况,但有一篇文章解决了这个问题:Can I build a REST application using ASP Classic?。 post 的大部分描述了有关 JSON 字符串化以及从数据库获取数据的各种问题。我的问题不涉及这些。但是忽略这些(以及一些语法错误),post.

中几乎没有其他内容

因此,我承认在服务器端行为方面我是一个新手。但是当我从上面提到的 post 中剥离所有内容时,我只剩下几行代码,这些代码似乎只是请求一个输入值,然后输出一个字符串。所以我想知道这是否真的是基本 I/O 所涉及的全部内容(即忽略安全和格式问题)。我决定试试这个。我的结果令人费解。当我调用这个非常简单的 API,而不是接收发送的非常简单的 JSON 字符串时,我取而代之的是从开头取回包含 API 的整个源代码HTML 标记结束。我显然犯了一个非常根本的错误。

这是我的代码。首先,这是极其简单的 REST API 本身(请注意:这只是回写一个人工的 JSON 字符串。它甚至不关心接收 POST 参数。)这是“simplerest.asp”

<html>
<head>
</head>
<body>
<%
Response.Write("{" & Chr(34) & "SomeCert" & Chr(34) & ":" & Chr(34) & "12345"& Chr(34) & "}")
%>
</body>
</html>

这里是调用此“API”(testrest.asp) 的代码(利用 jQuery):

<html>
<head>
<script type="text/javascript" src="/./include/jquery-3.4.1.min.js"></script>
</head>
<body>
    <script type="text/javascript">
        function getCert(certNumber) 
        {
            var settings = {
                "async": true,
                "crossDomain": true,
                "url": "example.com/simplerest.asp",
                "method": "GET",
                "success": function (response) {
                    alert("success");
                    },
                "headers": {
                      "Accept": "application/json"
                }
            }
            $.ajax(settings).done(function (response) {
                certvals = response;
                alert("certvals is " + certvals);
            });
        }
        getCert("dummy");
    </script>
</body>
</html>

如上所述,当我运行调用逻辑时,certvals中返回的是整个“API”代码的精确ASCII表示。本着我正在尝试的精神,即以最基本的模式查看 API 运行ning,有人能告诉我我犯了什么愚蠢的错误吗?

并在您的网站 (IIS) 中启用,使用;

<%
'Tell client you are sending JSON
Response.ContentType = "application/json"
Call Response.Write("{""SomeCert"":""12345""}")
%>

因为您将 JSON 封装在 HTML 结构中,它只是在 HTML 页面中作为字符串输出。

此外,当您可以通过加倍来转义字符串中的双引号时,就不需要 Chr(34)


关于 ,这是一个使用 IIS 本地实例测试的完整示例。

<html>
  <head>
    <title></title>
  </head>
  <body>
    <button id="buttonSend">Send</button>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
    <script>
      $("#buttonSend").on("click", function() {
        getCert("dummy");
      });

      function getCert(certNumber) 
      {
        var settings = {
          "async": true,
          "crossDomain": true,
          "url": "example.com/simplerest.asp",
          "method": "GET",
          "success": function (response) {
            alert("success");
          }
        }
        $.ajax(settings).done(function (response) {
          certvals = response;
          alert("certvals is " + certvals.SomeCert);
        });
      }
    </script>
  </body>
</html>

输出(两条消息):

success
certval is 12345

有用的链接

  • How to guide for getting a classic asp application working under IIS 7.0
  • ASP Classic setup issues
  • I have already enabled classic asp support on IIS for windows 7, and configured IIS web for classic asp,Yet .asp page is not being displayed?
  • About using Double quotes in Vbscript (解释如何在 VBScript 中转义双引号)